資源描述:
《Windows CE 下多線程串口通信》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、WindowsCE下多線程串口通信陳凱,鄧明,張啟升,李梅(中國地質(zhì)大學(xué)“地下信息探測技術(shù)與儀器”教育部重點(diǎn)實驗室,北京100083)摘要:本文重點(diǎn)描述了在WindowsCE5.0內(nèi)核下實現(xiàn)PC/104與GPS的通信,構(gòu)建了PC/104讀寫GPS信息的硬件系統(tǒng),深入剖析了WindowsCE5.0下進(jìn)行多線程串口通信的軟件實現(xiàn)機(jī)制,并展現(xiàn)了其在超長周期大地電磁儀中的成功應(yīng)用。關(guān)鍵詞:多線程;WindowsCE5.0;PC/104MultithreadingSerialPortCommunicationunderWindowsCEKernelCHE
2、NKai,DENGMing,ZHANGQiSheng,LIMei(ChinaUniversityofGeosciences,Geo-detectionLaboratory,MinistryofEducation,Beijing100083,China;)中圖法分類號:TP316.2文獻(xiàn)標(biāo)識碼:BAbstract:ThispapermainlydiscussestheCommunicationbetweenPC/104andGPSunderWindowsCE5.0kernel,constructsthehardwaresystemofPC/104
3、read-writeGPSinformation,analyzesthesoftwaremechanismofmultithreadingCOMcommunication,andexhibitsthesuccessfulapplicationinLMT(LongperiodMagnetotelluricInstrument).Keywords:Multithreading;WindowsCE5.0;PC/1041引言微軟WindowsCE(以下簡稱CE)內(nèi)核被設(shè)計成針對小型設(shè)備,以達(dá)到RTOS(實時操作系統(tǒng))最小要求,支持多種處理器的嵌入式設(shè)備
4、;CE是搶占式的多任務(wù)操作系統(tǒng),最大支持32個進(jìn)程,一個進(jìn)程中包含一個或多個線程,支持多線程處理和線程同步。提供豐富的WIN32API函數(shù),支持用戶開發(fā)MFC、ATL應(yīng)用程序。為實現(xiàn)多臺空間上獨(dú)立分散的超長周期大地電磁儀的高精度同步觀測,需采用GPS對鐘同步測量技術(shù)。系統(tǒng)GPS對鐘實現(xiàn)由PC/104(PCM-3350)的串口與GPS接收模塊(iTrax03)通信完成。串口在接受GPS電文的同時處理電文數(shù)據(jù),為保證數(shù)據(jù)不會丟失,采用CE內(nèi)核下開辟多線程以實現(xiàn)快速數(shù)據(jù)訪問處理。2硬件總體構(gòu)架系統(tǒng)硬件總體構(gòu)架如圖1所示。當(dāng)需要進(jìn)行GPS對鐘時,PC/
5、104開啟串口,設(shè)置串口參數(shù),實現(xiàn)與GPS參數(shù)的匹配。GPS接收衛(wèi)星電文發(fā)至串口請求PC/104接收,PC/104讀取串口數(shù)據(jù)并提取相關(guān)時間和經(jīng)緯度信息,經(jīng)PC/104總線送至FPGA,請求FPGA將GPS時間信息寫入RTC實時鐘內(nèi)。FPGA接收到指令后,將時間信息寫入RTC中,同時FPGA將檢測由GPS發(fā)送的PPS秒脈沖同步信號,并用其來更新RTC內(nèi)的秒更新信號PPS,由此實現(xiàn)了RTC內(nèi)時鐘與GPS的嚴(yán)格同步,從而達(dá)到多臺儀器的同步采集的要求。GPS(iTrax03)PC/104(PCM-33RS232PC/104總線PPS秒脈沖RTC實時鐘
6、FPGA(EP1K30)(DS17887)圖1系統(tǒng)硬件總體構(gòu)架陳凱等:WindowsCE下多線程串口通信3多線程串口通信的實現(xiàn)串行端口在CE下屬于流接口設(shè)備,提供串行設(shè)備接口常規(guī)I/O驅(qū)動程序與串口通信API函數(shù)。CE的串口函數(shù)和Windows的串口函數(shù)基本相同,下面分別介紹串口通信API函數(shù)、線程及事件同步機(jī)制。3.1串口API函數(shù)介紹在所有的流設(shè)備驅(qū)動程序中,均使用CreateFile函數(shù)來打開。打開串口實例hPort=CreateFile(lpszPortName,GENERIC_READ
7、GENERIC_WRITE,0,NULL,OPE
8、N_EXISTING,0,NULL);需要注意的是CE不支持重疊的I/O操作,打開串口1參數(shù)lpszPortName設(shè)置為_T(“COM1:”)。如果打開串口成功,返回打開的串口句柄,否則返回INVALID_HANDLE_VALUE。關(guān)閉串行端口比較簡單,調(diào)用CloseHandle函數(shù)就能關(guān)閉一個打開的串行端口??梢允褂肦eadFile和WriteFile函數(shù)來讀取串口數(shù)據(jù)和向串口發(fā)送數(shù)據(jù)。由于從串口讀寫數(shù)據(jù)的速度比較慢,因此進(jìn)行大量數(shù)據(jù)讀寫時需要開辟專門的線程來完成讀寫操作。在實際使用串口時,還必須配置好串口的波特率、奇偶校驗位、停止位和數(shù)據(jù)
9、位等參數(shù)。CE中提供GetCommState和SetCommState函數(shù)來獲取串口的當(dāng)前參數(shù)和設(shè)置串口的參數(shù)。在調(diào)用ReadFile和WriteFi