基于Windows CE平臺的GPS移動(dòng)設備設計
2 整體設計
設計主要依照GPS數據信號的流向來(lái)進(jìn)行。GPS數據信號通過(guò)串口讀入到開(kāi)發(fā)板主程序,然后經(jīng)過(guò)對數據信號進(jìn)行解碼獲得當前位置的經(jīng)緯度信息,再在經(jīng)緯度數據庫中查詢(xún)獲得當前位置的地名,整個(gè)過(guò)程由觸摸屏進(jìn)行顯示,并通過(guò)觸摸屏完成人機交互。
2.1 串口驅動(dòng)
Microsoft eMbedded Tools封裝了Windows API函數,便于Windows CE應用程序的開(kāi)發(fā)。在Windows CE中,所有的設備都被看成是文件。串口通信可以像訪(fǎng)問(wèn)普通文件那樣通過(guò)API通信函數來(lái)實(shí)現,系統的虛擬驅動(dòng)程序負責執行特定的工作。在Windows CE下串行端口被視為用于打開(kāi)、關(guān)閉、讀寫(xiě)串行端口的常規可安裝的流設備,是串行設備接口的常規I/O驅動(dòng)程序調用和與通信相關(guān)的具體函數的結合。Windows CE的通信函數和其它大多數Windows的通信函數相似,值得注意的是,Windows CE不支持直接對串行端口的寄存器進(jìn)行編程。
2.1.1 打開(kāi)和關(guān)閉串口
CreateFile函數用于打開(kāi)串行口。m_hDSComm=CreateFile(_T(COM2:)),GENER2IC_READ|GENER IC_WR ITE,0,NULL,OPEN_EXISTIN-G,0,NULL)。注意COM2后面要有一個(gè)冒號。第三個(gè)參數dwShareMode也必須為O,通信端口不能像文件一樣被共享。最后一個(gè)參數dwFlagsAnd-Attributes必須為0,因為Windows CE只支持非重疊I/O。這個(gè)函數的返回值是已打開(kāi)的串行端口的句柄或者是INVALLD_HANDLE_VALUE。關(guān)閉串口可以調用CloseHandle(m_hDSComm)。
2.1.2 串口參數設置
串口設置主要是用DCB構配置端口設置,包括波特率、停止位、數據位長(cháng)度、校驗位、流量控制和超時(shí)值等等。首先打開(kāi)串行端口,用GetCommState函數獲得當前打開(kāi)的串口配置,然后根據需要修改DCB成員,最后用SetCommState函數設置新的串口配置。
2.1.3 設置緩沖區大小和超時(shí)
對串口來(lái)說(shuō),必須設置超時(shí)值,否則程序可能陷入到一個(gè)循環(huán)來(lái)等待來(lái)自串口的字符。這對采用WindowsCE的設備來(lái)說(shuō),將大大減少設備電池的使用時(shí)間,所以超時(shí)值是必須配置的。另外一種解決辦法就是采用多線(xiàn)程。通常,配置超時(shí)值和配置串口類(lèi)似。首先用GetCommTi-meouts函數獲得當前串口的超時(shí)值,然后修改COM2MTIMEOUTS成員,最后用SetCommTimeouts函數設定超時(shí)值。
2.1.4 讀寫(xiě)串口
利用ReadFile和WriteFile函數讀寫(xiě)串口。需要注意的是Windows CE不支持重疊I/O,所以如果在主線(xiàn)程進(jìn)行大量讀寫(xiě)串口操作時(shí),有可能使整個(gè)程序陷入緩慢的串口等待中去,因此一般都采用多線(xiàn)程來(lái)進(jìn)行讀寫(xiě)串口操作。
2.2 GPS數據處理
GPS數據處理模塊的設計方案如圖1所示。GPS接收模塊通過(guò)串口2將定位數據(NMEA0183 Ver2.0)傳給開(kāi)發(fā)板,然后應用程序對數據進(jìn)行處理。在VS2005中,直接利用串口通信方法將定位數據讀入,接著(zhù)進(jìn)行定位數據的分類(lèi),并提取出所需要的信息,同時(shí)將這些有用的信息傳給主應用程序,主應用程序再將GPS接收模塊的控制信息整理成NEMA0183 VER2.0語(yǔ)句。
圖1 GPS數據處理模塊設計方案示意圖
評論