日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

基于windowsce的降低串口通信丟包率的方法

文檔序號:7961039閱讀:1997來源:國知局
專利名稱:基于windows ce的降低串口通信丟包率的方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信技術(shù)領(lǐng)域,具體地說是一種基于WINDOWS CE的降低串口通信丟包率的方法。
背景技術(shù)
串口因其傳輸距離長、數(shù)據(jù)傳輸可靠、通信協(xié)議簡單、價格低廉、使用方便等優(yōu)點, 一直都是各類嵌入式設(shè)備上重要的通信接口。Windows CE是微軟公司專門為嵌入設(shè)備推出的一款嵌入式操作系統(tǒng)。它具有高可靠性、高實時性、功能強大、界面友好的特點,得到了廣泛應(yīng)用。
以Windows CE為操作系統(tǒng)的嵌入式設(shè)備上基本都配備串口?;诖罅繙y試證明, 基于Windows CE的串口在中、低速數(shù)據(jù)傳輸時不會丟包。但在海量、高速串口傳輸時會有丟包現(xiàn)象出現(xiàn),比如在傳輸10萬字節(jié),波特率在115200bps的高速傳輸情況下,丟包率在 5% -10%范圍內(nèi),這種丟包現(xiàn)象在某些重要領(lǐng)域(比如軍事應(yīng)用領(lǐng)域)是不允許出現(xiàn)的。
從圖1、圖2可以清楚地看到現(xiàn)有技術(shù)中Windwos CE串口驅(qū)動的架構(gòu)以及工作流程,架構(gòu)中與底層硬件互動最緊密的是CPddl6550類與CBulpddl6550XUART類。
造成串口丟包最有可能的原因,主要有兩種第一種是硬件接收緩沖器(即接收 FIFO)的中斷觸發(fā)點設(shè)置的太大,當(dāng)中斷觸發(fā)時接收FIFO已經(jīng)或接近飽和,很可能會造成讀取速度跟不上接收速度,舊數(shù)據(jù)來不及讀取就被新來的數(shù)據(jù)覆蓋掉了,從而造成數(shù)據(jù)丟失。第二種可能是接收FIFO的中斷觸發(fā)點設(shè)置的太小,造成讀取效率偏低,也會造成數(shù)據(jù)丟失。
通過閱讀微軟的Windows CE串口驅(qū)動,恰恰驗證了之前的分析??刂平邮誇IFO 的代碼,不能讀取注冊表設(shè)置的接收FIFO中斷觸發(fā)點的大小值,只能將接收FIFO觸發(fā)點設(shè)置成最小值或最大值時觸發(fā)中斷,這就導(dǎo)致了在WindowsCE下用高波特率的串口連續(xù)接收大量數(shù)據(jù)時容易出現(xiàn)丟包現(xiàn)象。發(fā)明內(nèi)容
本發(fā)明的技術(shù)任務(wù)是針對在現(xiàn)有技術(shù)的不足,提供一種基于WINDOWS CE的降低串口通信丟包率的方法。
本發(fā)明的技術(shù)方案是按以下方式實現(xiàn)的,該一種基于WINDOWS CE的降低串口通信丟包率的方法,以Windows CE 5.0為嵌入式操作系統(tǒng),以工業(yè)級PXA270CPU自帶的串口為通信接口,其具體實現(xiàn)步驟包括
一、讀取注冊表中的用戶根據(jù)具體串口芯片參數(shù)而設(shè)置的接收FIFO中斷觸發(fā)點的大小值;
二、將讀取的中斷觸發(fā)點的大小值,寫入串口控制寄存器FCR的ITL位置。
所述實現(xiàn)接收FIFO的關(guān)鍵控制代碼為
4static PAIRS s_HighWaterPairs[] 二 { {SERIAL—1_BYTE_HIGH_WATER, 1}, {SERIAL_4_BYTE—HIGH_WATER, 8}, {SERIAL_8_BYTE_HIGH_WATER, 16}, {SERIAL_14_BYTE_HIGH_WATER, 32}};virtual CBulPddl6550FUART::BYTE GetWaterMarkBit (){BYTE bReturnKey = (BYTE)s_HighWaterPairs
. Key;for (DWORD dwlndex=dim(s_HighWaterPairs) -1 ; dwlndex! =0; dwlndex—){if (m_dwWaterMark>=s_HighWaterPairs[dwlndex]. AssociatedValue){bReturnKey = (BYTE)s_HighWaterPairs[dwlndex]. Key; break;}}return ((bReturnKey 6)&0x03);}BOOL CPddl6550::InitReceive(BOOL blnit){m_HardwareLock. Lock (); if (blnit) {BYTE uWarterMarkBit = GetWaterMarkBitO ; if (uWarterMarkBit) 3)
uWarterMarkBi t = 3; m_pRegl6550->Write_FCR(m_pRegl6550->Read_FCR()| SERIAL_FCR_RCVR_RESET | SERIAL—FCR_ENABLE | (uWarterMarkBit〈〈6));m_pRegl6550->Write_IER(m_pRegl6550->Read_IER()|SERIAL_IER_RDA);m—pRegl6550->Read_LSR(); // Clean Line Interrupt.}else {m_pRegl6550->Write_IER(m_pRegl6550->Read_IER()&SERIAL_IER_RDA);}m_HardwareLock. Unlock (); return TRUE;}
本發(fā)明與現(xiàn)有技術(shù)相比所產(chǎn)生的有益效果是
本發(fā)明的基于WINDOWS CE的降低串口通信丟包率的方法解決了 WindowsCE串口設(shè)備在進行海量、高速數(shù)據(jù)通信時的丟包問題。改進后的丟包率明顯降低,丟包率從10%降低為0%。以滿足重要、關(guān)鍵應(yīng)用環(huán)境下對串口數(shù)據(jù)傳輸完整性的要求,消除了可能造成數(shù)據(jù)丟失的潛在因素,提高了串口單位時間的數(shù)據(jù)吞吐量和實時性,保證了串口在海量、高速數(shù)據(jù)傳輸時的可靠性,此發(fā)明適用于所有基于Windows CE的串口設(shè)備,應(yīng)用范圍廣泛。


附圖1是Windows CE串口驅(qū)動架構(gòu)圖。
附圖2是串口驅(qū)動工作流程圖。
具體實施方式
下面對本發(fā)明所提供的基于WINDOWS CE的降低串口通信丟包率的方法作以下詳細說明。
為解決Windows CE串口設(shè)備在海量、高速數(shù)據(jù)傳輸時的數(shù)據(jù)丟包現(xiàn)象,本發(fā)明從軟件角度提供了一種解決方案。首先,搞清楚Windows CE串口驅(qū)動程序的架構(gòu)和工作流程; 然后分析出現(xiàn)丟包的原因,找到影響數(shù)據(jù)傳輸穩(wěn)定性的關(guān)鍵代碼并加以改進;最后,經(jīng)過嚴(yán)格測試,驗證改進效果,此方案通過修改Windows CE串口驅(qū)動源代碼。
一種基于WINDOWS CE的降低串口通信丟包率的方法,以Windows CE 5. 0為嵌入式操作系統(tǒng),以工業(yè)級PXA270CPU自帶的串口為通信接口,其具體實現(xiàn)步驟包括
一、讀取注冊表中的用戶根據(jù)具體串口芯片參數(shù)而設(shè)置的接收FIFO中斷觸發(fā)點的大小值;6
二、將讀取的中斷觸發(fā)點的大小值,寫入串口控制寄存器FCR的ITL位置。
所述實現(xiàn)接收FIFO的關(guān)鍵控制代碼為
static PAIRS s_HighWaterPairs[] = { {SERIAL_1_BYTE_HIGH_WATER, 1}, {SERIAL_4_BYTE_HIGH_WATER, 8}, {SERIAL_8_BYTE_HIGH—WATER, 16}, {SERIAL_14_BYTE_HIGH_WATER, 32}};virtual CBulPddl6550FUART::BYTE GetWaterMarkBitO{BYTE bReturnKey 二 (BYTE)s_HighWaterPairs
. Key;for (DWORD dwIndex=dim(s_HighWaterPairs) ; dwlndex ! =0 ; dwlndex—){if (m_dwWaterMark>=s_HighWaterPairs[dwlndex]. AssociatedValue){bReturnKey = (BYTE)s—HighWaterPairs[dwlndex]· Key; break;}}return ((bReturnKey: 6)&0x03);}BOOL CPddl6550::InitReceive(B00L blnit){m—HardwareLock. Lock (); if (blnit) {BYTE UWarterMarkBit = GetWaterMarkBitO ; if (uWarterMarkBit) 3)
uWarterMarkBit = 3; m_pRegl6550->Write_FCR(m_pRegl6550->Read_FCR()| SERIAL_FCR_RCVR_RESET | SERIAL_FCR_ENABLE | (uWarterMarkBit<<6));m_pRegl6550->Write_IER(m_pRegl6550->Read_IER()|SERIAL_IER_RDA);m_pRegl6550->Read_LSR(); // Clean Line Interrupt.}else {m_pRegl6550->Write_IER(m_pRegl6550->Read_IER()&SERIAL_IER_RDA);}m_HardwareLock. Unlock (); return TRUE;}
實施例
以PXA270串口為例,接收FIFO的總大小為64字節(jié),如果在注冊表中將中斷觸發(fā)點的大小設(shè)置為32字節(jié),這樣即保證了接收FIFO的實時性,也保證了接收FIFO具有一定的吞吐量。有效解決了 Windows CE串口設(shè)備在進行海量、高速數(shù)據(jù)通信時的丟包問題。改進后的丟包率明顯降低,丟包率從10%降低到0%,即數(shù)據(jù)完整率達到100%。使Windows CE串口設(shè)備能夠滿足關(guān)鍵應(yīng)用環(huán)境下對串口數(shù)據(jù)傳輸完整性的要求,對基于Windows CE 的串口設(shè)備的推廣具有重要意義。
權(quán)利要求
1.基于WINDOWSCE的降低串口通信丟包率的方法,其特征在于以WindowsCE 5. O為嵌入式操作系統(tǒng),以工業(yè)級PXA270CPU自帶的串口為通信接口,其具體實現(xiàn)步驟包括一、讀取注冊表中的用戶根據(jù)具體串口芯片參數(shù)而設(shè)置的接收FIFO中斷觸發(fā)點的大小值;二、將讀取的中斷觸發(fā)點的大小值,寫入串口控制寄存器FCR的ITL位置。
2.根據(jù)權(quán)利要求1所述的基于WINDOWSCE的降低串口通信丟包率的方法,其特征在于所述實現(xiàn)接收FIFO的關(guān)鍵控制代碼為static PAIRS s_HighWaterPairs[] = {{serial_i_byte_high_water, 1},{SERIAL_4_BYTE_HIGH_WATER, 8}, {SERIAL_8_BYTE—HIGH—WATER, 16}, {SERIAL—14—BYTE—HIGH—WATER, 32}};virtual CBulPddl6550FUART::BYTE GetWaterMarkBitO{BYTE bReturnKey = (BYTE)s_HighWaterPairs
. Key;for (DWORD dwlndex=dim(s_HighWaterPairs) -1 ; dwlndex! =0 ; dwlndex --){if (m_dwWaterMark>=s_HighWaterPairs[dwlndex]. AssociatedValue){bReturnKey = (BYTE)s_HighWaterPairs[dwlndex]. Key; break;}}return ((bReturnKey》6)&0x03) ;·}BOOL CPddl6550::InitReceive(B00L blnit){m—HardwareLock. Lock ();BYTE uWarterMarkBit = GetWaterMarkBitO ; if (uWarterMarkBit> 3)uWarterMarkBit = 3; m_pRegl6550->Write_FCR(m_pRegl6550->Read_FCR()| SERIAL_FCR_RCVR_RESET | SERIAL—FCR—ENABLE; | (uWarterMarkBit 6));m_pRegl6550->Write_IER(m_pRegl6550->Read_IER() SERIAL_IER_RDA);m_pRegl6550->Read_LSR(); // Clean Line Interrupt.}else {m_pRegl6550->Write_IER(m_pRegl6550->Read_IER()&SERIAL_IER_RDA);}m—HardwareLock. Unlock (); return TRUE;全文摘要
本發(fā)明提供基于WINDOWS CE的降低串口通信丟包率的方法,以Windows CE5.0為嵌入式操作系統(tǒng),以工業(yè)級PXA270CPU自帶的串口為通信接口,其具體實現(xiàn)步驟包括讀取注冊表中的用戶根據(jù)具體串口芯片參數(shù)而設(shè)置的接收FIFO中斷觸發(fā)點的大小值;將讀取的中斷觸發(fā)點的大小值,寫入串口控制寄存器FCR的ITL位置。該基于WINDOWS CE的降低串口通信丟包率的方法和現(xiàn)有技術(shù)相比,消除了可能造成數(shù)據(jù)丟失的潛在因素,提高了串口單位時間的數(shù)據(jù)吞吐量和實時性,保證了串口在海量、高速數(shù)據(jù)傳輸時的可靠性。
文檔編號H04L1/00GK102508806SQ201110342799
公開日2012年6月20日 申請日期2011年11月3日 優(yōu)先權(quán)日2011年11月3日
發(fā)明者崔凱, 牛玉峰, 耿士華, 邊守華 申請人:山東超越數(shù)控電子有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1