嵌入式Linux平臺的GPS數(shù)據(jù)采集研究
2.2 GPs中定位信息的獲取舉例
在嵌入式Linux系統(tǒng)中進(jìn)行串口編程,讀取GPS數(shù)據(jù)的定位信息.
/*包含必要的頭文件*/
#include termios.h>
#include stdio.h>
#include unistd.h>
#include fcntl.h>
/*打開串口設(shè)備*/
int fd=open(/dev/ttyS0,O_RDWR|O_NOCTTY)/* O_RDWR表示以讀寫方式打開,O_NOCTTY表示串口不是控制終端*/
struet termios old_options,new_options
/*定義兩個termios結(jié)構(gòu),其中,old_options用于保存原有的設(shè)備工作方式,new_options用于設(shè)置新的設(shè)備工作方式 */
tcgetattr(fd,old_options) /*獲取當(dāng)前設(shè)備方式*/
/*設(shè)置結(jié)構(gòu)體new_options中的c_jflag、c_oflag、c_cflag、c_lflag和c_cc,再用cfsetispeed()和cfsetospeed()函數(shù)設(shè)置波特率 */
new_options.c_cflag = PARENB; /*無奇偶校驗位*/
new_options.c_cflag = CSIZE; /*不隱藏數(shù)據(jù)位*/
new_options.c_cflag = CSTOPB; /*無停止位*/
new_options.c_cflag |=CS8; /*8位數(shù)據(jù)位*/
new_options.c_oflag=ICRNL; /*將輸出的CR轉(zhuǎn)換成NL*/
new_options.c_lflag=(ICANON | ECHO | ECHOE | SIG); /*選擇原始輸入模式,使輸入字符與接收到的字符相同*/
new_options.c_cc[VTIME]=10; /*設(shè)置超時計時器為10x0.1=1秒*/
new_options.c_ce[VMIN]=76; /*設(shè)置讀取的最小字符數(shù)為76個*/
cfsetispeed(new_options,B4800); /*設(shè)置輸入波特率為4800*/
cfsetospeed(new_options,B4800); /*設(shè)置輸出波特率為4800*/
tcflush(fd,TCIOFLUSH); /*丟棄隊列中尚未傳送或接收的數(shù)據(jù)*/
tcsetattr(fd,TCSANOW,new_options); /*設(shè)置新的設(shè)備方式*/
/*完成終端的設(shè)置后,處理串口設(shè)備的GPS數(shù)據(jù)輸入,從中選取有用的定位信息*/
int nByteRead =read(fd,buf,LENGTH);
if((buf[O]==$)(buf[3]==R)(buf[4]==M)(buf[5]==C))
/*檢查語句串頭若為RMC則表示此語句為定位語句,選取此語句內(nèi)容,其余忽略*/
{
/*檢驗校驗和,如果校驗和正確繼續(xù),否則返回*/
if(buf[i]= ,){/*提取并分解各逗號間的數(shù)據(jù)并進(jìn)行處理或發(fā)送至其它應(yīng)用程序*/}
}
以上代碼只是GPS輸出數(shù)據(jù)中定位信息提取的關(guān)鍵代碼,要完成進(jìn)一步的完整功能還需編寫大量的代碼,這里就不一一列出.
3 結(jié)束語
GPS設(shè)備與嵌入式Linux平臺之間的數(shù)據(jù)是實現(xiàn)嵌入式GIS定位功能的基礎(chǔ),隨著基于嵌入式Linux的嵌入式GIS的應(yīng)用日益廣泛,GPS數(shù)據(jù)的采 集方法成為一項基礎(chǔ)性工作,本文針對GPS數(shù)據(jù)的采集,詳細(xì)分析了目前普遍采用的NMEA0183協(xié)議,并在此基礎(chǔ)上對嵌入式Linux環(huán)境下的GPS數(shù) 據(jù)采集進(jìn)行舉例分析.
本文引用地址:http://www.ex-cimer.com/article/195179.htm linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論