设为首页 加入收藏

TOP

嵌入式Linux中GPS信息读取与处理
2014-11-24 00:08:11 来源: 作者: 【 】 浏览:7
Tags:嵌入式 Linux GPS 信息 读取 处理

GPS模块使用的是NMEA-0183 协议,NMEA-0183 是美国国家海洋电子协会(National MarineElectronics Association)所指定的标准规格,这一标准制订所有航海电子仪器间的通讯标准,其中包含传输资料的格式以及传输资料的通讯协议。所以通常情况下,只需要通过串口读取信息,通过字符串解析的方式把需要的数据分离出来就可以得到GPS数据。


具体的协议内容可以参见本文附录的参考资料,在具体的的字符串解析中,实际只需要解析$GPGGA、$GPRMC两个语句即可获得我们所需要的全部内容,包括经纬度,时间,搜星状态,卫星数量,高度,速度以及其他信号等,不同数据之间在获取的字符串中是使用逗号隔开的,而相对位置固定,因此整体的思路就是读取字符串,通过逗号位置判别对应数据,实现读取分析。


作为数据读取分析的基本,嵌入式linux的串口编程就是基础中的基础了,串口的设置主要是设置struct termios结构体的各成员值。termios是在POSIX规范中定义的标准接口,表示终端设备(包括虚拟终端串口等)口是一种终端设备,一般通过终端编程接口对其进行配置和控制。在具体讲解串口相关编程之前,先了解一下终端相关知识
终端有3种工作模式,分别为规范模式(canonical mode)、非规范模式(non-canonical mode)和原始模式(raw mode)通过在termios结构的c_lflag中设置ICANNON标志来定义终端是以规范模式(设置ICANNON标志)还是以非规范模式(清除ICANNON标志)工作,默认情况为规范模式


在规范模式下,所有的输入是基于行进行处理在用户输入一个行结束符(回车符、EOF等)之前,系统调用read()函数读不到用户输入的任何字符。除了EOF之外的行结束符(回车符等)与普通字符一样会被read()函数读取到缓冲区之中。在规范模式中,行编辑是可行的,而且一次调用read()函数最多只能读取一行数据如果在read()函数中被请求读取的数据字节数小于当前行可读取的字节数,则read()函数只会读取被请求的字节数,剩下的字节下次再被读取


在非规范模式下,所有的输入是即时有效的,不需要用户另外输入行结束符,而且不可进行行编辑在非规范模式下,对参数MIN(c_cc[VMIN])和TIME(c_cc[VTIME])的设置决定read()函数的调用方式设置可以有4种不同的情况


按照严格意义来讲,原始模式是一种特殊的非规范模式在原始模式下,所有的输入数据以字节为单位被处理。在这个模式下,终端是不可回显的,而且所有特定的终端输入/输出控制处理不可用通过调用cfmakeraw()函数可以将终端设置为原始模式,而且该函数通过以下代码可以得到实现。


实现环境Qt


这段程序为自行修改,实际测试通过,完成了串口配置和数据处理功能,可以直接解析获得GPS相关参数。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Qt Creator 窗体控件自适应窗口大.. 下一篇OpenCV 实现人脸检测与相关知识整..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: