Linux 基础_JAVA-创客学院​www.makeru.com.cn

随着GPS(全球定位系统)和便携移动设备的飞速发展,各种各样以GPS为基础的便携式定位系统相继出现.嵌入式Linux以其开放性、安全性、健壮性和 稳定性越来越成为各种便携设备的主要开发平台,因此GPS模块与嵌入式Linux平台之间的通信成了实现定位系统的基础.

GPS模块与嵌入式Linux平台之间进行数据传送,大多采用异步串行传送方式,GPS作为终端设备(DTE)与嵌入式平台之间通过RS-232C串行通 信接口进行数据交换.因此,与GPS的数据通信在实现上即是LinuX下的串口编程,对于两者之间的通信协议,可选的协议有很多种,而NMEA0183是 目前普遍采用的一种

1 NMEA0183通信协议
NMEA0183是GPS数据的通信协议,GPS的通信协议有很多种,但目前绝大多数GPS模块生产厂商都采用NMEA0183协议作为其遵循的标准,因此在实现GPS与嵌入式Linux平台之间的通信时,应先对NMEA0183协议有一定的了解。
(1)NMEA0183的通信参数.波特率:4800baud;数据位:8;奇偶校验:无;停止位:1位.
(2)NMEA0183的报文格式.NMEA 0183协议报文的语句串(ASCII字符)格式全部信息如图1.

$AAXXX ,ddd …… ,ddd *hh 图1 NMEA0183的报文格式
图1中具体内容:$为串头,表示串开始;AA为识别符;XXX为语句名;ddd...ddd为数据字段,字母或数字;*表示串尾;hh表示$与*之间所有字符代码的校验和;为回车控制符;为换行控制符.
在实际的GPS应用中,并不会用到NMEA的全部信息,而是根据具体的需要,从中选取有用的信息,忽略其余的信息内容.
例如:$GPRMC,152252,A,2513.3072,N,10346.3723,E,0.0,230.4,250503,1.3,W,A,* 02
其中,$GPRMC为串头,表示此语句为定位语句;“*”之前的内容为数据字段,“152252”为UTC24小时制的标准时间,格式为“时时/分分/秒 秒”;“A”表示信号接收状态,“A”表示接收正常,也可能为“V”,则表示一个警告,与卫星通信不正常;“2513.3072”表示纬度值;“N”标明 南北半球,“N”表示北纬,“S”表示南纬;“10346.3723”表示经度值;“E”标明东西半球,“E”表示东经,“W”表示西经;“0.0”表示 速度;“230.4”表示方位角,它的范围为000.0-359.9;“251205”表示UTC标准时间的日期,格式为“日日/月月/年年 ”;“1.3”表示磁偏角,范围为000.0-180.0;“W”表示地磁变化方向.

2 GPS数据的采集
嵌入式Linux平台下的GPS数据采集涉及到Linux串口编程技术,因此首先介绍Linux串口编程的相关知识,再给出一个简单的代码段,实现GPS定位信息的获取.
2.1 Linux串口通信
在Linux操作系统中,所有的设备都是被当作文件来进行操作的,所有的设备以设备文件的形式存储在目录/dev/下,串口的设备文件为/dev/ttyS*,其中,ttyS0为串口一,ttyS1为串口二,以此类推.
Linux下定义了一个查询和操纵终端的标准接口,该接口被称为termios,在系统头文件中定义.它包括一个数据 结构和一系列操纵这些数据结构的函数组成.有关串口的所有参数配置都保存在接口termios的结构struct termios中,该结构定义如下:
struet termios
{
unsigned short c_iflag; /*输入模式标志*/
unsigned short c_oflag; /*输出模式标志*/
unsigned short c_cflag; /*控制模式标志*/
unsigned short c_lflag; /本地模式标志/
unsigned char c_line; /*控制协议*/
unsigned char c_cc[NCCS] /*控制字符*/
}
其中的c_flag成员是用来控制输入处理选项的,它将影响到终端驱动程序在把输入发送给程序前是否对其进行处理,及怎样对其进行处理.c_oflag成 员是用来控制输出数据的处理,并决定在发送输出数据到显示屏和其他输出设备之前,终端驱动程序是否以及如何来处理它们.c_oflag用于存放各种决定终 端设备硬件特性的控制标志.存放在c_lflag中的本地模式标志用来操纵这样的一些终端特性,比如是否将输入字符显示到显示屏上.c_cc包含了特殊字 符序列的值,比如^(退出)和^H(删除),以及它们所代表的操作.除了上面的这个包含串口参数配置的数据结构之外,termios中还包含许多控制串口 特性的函数.其中基本的函数如:tcgetattr()和tcsetattr().tcgetattr()用来初始化一个termios数据结构,之后可 使用其它的函数来操纵由tcgetattr()返回的数据结构.完成这些操作后,使用tcsetattr()来更新串口的设置.
其它对串口的打开、关闭、读取功能与其它的文件操作一致,使用open()、close()、read()函数完成.
在采集GPS数据的过程中,需对所读取的数据进行鉴别区分,只选取其中有用的信息进行处理而忽略其余的信息,这需要根据NMEA0183协议中规定的语句格式来进行筛选.
2.2 GPs中定位信息的获取举例
在嵌入式Linux系统中进行串口编程,读取GPS数据的定位信息.
/*包含必要的头文件*/
#include
#include
#include
#include
/*打开串口设备*/
int fd=open("/dev/ttyS0",O_RDWR|O_NOCTTY)/* O_RDWR表示以读写方式打开,O_NOCTTY表示串口不是控制终端*/
struet termios old_options,new_options
/*定义两个termios结构,其中,old_options用于保存原有的设备工作方式,new_options用于设置新的设备工作方式 */
tcgetattr(fd,&old_options) /*获取当前设备方式*/
/*设置结构体new_options中的c_jflag、c_oflag、c_cflag、c_lflag和c_cc,再用cfsetispeed()和cfsetospeed()函数设置波特率 */
new_options.c_cflag &= PARENB; /*无奇偶校验位*/
new_options.c_cflag &= CSIZE; /*不隐藏数据位*/
new_options.c_cflag &= CSTOPB; /*无停止位*/
new_options.c_cflag |=CS8; /*8位数据位*/
new_options.c_oflag=ICRNL; /*将输出的CR转换成NL*/
new_options.c_lflag=(ICANON | ECHO | ECHOE | SIG); /*选择原始输入模式,使输入字符与接收到的字符相同*/
new_options.c_cc[VTIME]=10; /*设置超时计时器为10x0.1=1秒*/
new_options.c_ce[VMIN]=76; /*设置读取的最小字符数为76个*/
cfsetispeed(&new_options,B4800); /*设置输入波特率为4800*/
cfsetospeed(&new_options,B4800); /*设置输出波特率为4800*/
tcflush(fd,TCIOFLUSH); /*丢弃队列中尚未传送或接收的数据*/
tcsetattr(fd,TCSANOW,&new_options); /*设置新的设备方式*/
/*完成终端的设置后,处理串口设备的GPS数据输入,从中选取有用的定位信息*/
int nByteRead =read(fd,buf,LENGTH);
if((buf[O]==$)&&(buf[3]==R)&&(buf[4]==M)&&(buf[5]==C))
/*检查语句串头若为RMC则表示此语句为定位语句,选取此语句内容,其余忽略*/
{
/*检验校验和,如果校验和正确继续,否则返回*/
if(buf[i]= ,){/*提取并分解各逗号间的数据并进行处理或发送至其它应用程序*/}
}
以上代码只是GPS输出数据中定位信息提取的关键代码,要完成进一步的完整功能还需编写大量的代码,这里就不一一列出.

3 结束语
GPS设备与嵌入式Linux平台之间的数据是实现嵌入式GIS定位功能的基础,随着基于嵌入式Linux的嵌入式GIS的应用日益广泛,GPS数据的采 集方法成为一项基础性工作,本文针对GPS数据的采集,详细分析了目前普遍采用的NMEA0183协议,并在此基础上对嵌入式Linux环境下的GPS数 据采集进行举例分析.

GPS 校验和 代码_嵌入式Linux平台的GPS数据采集相关推荐

  1. GPS 校验和 代码_浙江国产安全阀校验台批发价-欧迪美特ODMT

    金山区实验设备标定-世通检测校准中心那里可以校准仪器量具机构公司实验室,金山区在那里可以校准仪器认可*仪器校准金山区校验外校计量第三方认可权威机构附近单位在那?快速出具报告,计量所,金山区世通仪器校准 ...

  2. GPS 校验和 代码_今日份∣学习(三菱-菱云系列)电梯故障代码表

    作为电梯人, 我们不仅要从培训中学习, 更要从实践中总结窍门和技巧, 这样,见的多了, 遇到问题才不会慌张,才能得心应手, 想要成为"电梯高手", 还需要我们下功夫,加油吧! 故障 ...

  3. GPS 校验和 代码_每天学习一点点~每天学习一点点~安全阀安全技术监察规程 安全阀校验与修理...

    点击蓝字获取更多精彩信息 安全阀校验与修理 D1 校验设备 D1.1 安全阀校验装置的组成 安全阀校验装置由校验台.气源和管路等组成(参见附件F). D1.2 校验气源 应当符合以下要求: (1)可配 ...

  4. GPS 校验和 代码_高精度GNSS服务每个人:安卓智能 手机提供GPS原始测量数据实现高精度定位...

    低成本GNSS芯片的发展推动了定位.导航和授时(PNT)设备的革命.GNSS定位技术曾用于军事行动和大地测量,随着启用GNSS功能的汽车导航设备和智能手机的发展,最终进入百万(甚至数十亿)用户的生活中 ...

  5. 嵌入式 Linux平台 C程序 交叉编译技术

    嵌入式Linux平台C程序交叉编译技术 一.实验目的和任务 本实验要求复习和掌握Linux平台的C程序开发过程. 本实验要求掌握嵌入式开发板的操作方法. 本实验要求掌握Linux平台交叉编译方法和程序 ...

  6. SIMcom嵌入式Linux平台通用配置

    修订记录 修订日期 修订作者 修订备注 创建第一版 2020.02.14 forwardxiang@163.com 文档版本V1.0.0 文章目录 第一部分 SIMcom嵌入式Linux平台通用配置 ...

  7. linux算法设计,嵌入式Linux平台下随机序列算法设计.doc

    嵌入式Linux平台下随机序列算法设计 嵌入式Linux平台下随机序列算法设计 [摘 要]本文以多媒体播放器的随机不重复播放机能为切入点,针对嵌入式平台实时性要求高,处理速度不够快,但系统存储歌曲量大 ...

  8. linux 文件系统字体小,基于嵌入式Linux平台的最小文件系统的制作

    工作平台:FL2440 交叉编译环境:arm-linux-gcc 3.4.1 busybox版本:1.9.1 1) 制作文件系统总目录: mkdir my_rootfs 2) 编译&安装bus ...

  9. 嵌入式linux毕业设计,基于嵌入式Linux平台的智能小区终端系统设计与实现

    内容简介: 硕士学位论文 基于嵌入式Linux平台的智能小区终端系统设计与实现,正文共69页. [摘要] 智能化小区通过采用智能终端系统,为住户提供了一种更加安全.舒适.方便.快捷和开放的智能化.信息 ...

  10. arm linux udp 自发自收_嵌入式linux编程开发必备知识

    嵌入式linux是嵌入式开发必不可少的一份子,在科技高速发展的今天,嵌入式已然已经成为了最热门的技术之一了.对于想要学习好嵌入式的学员来说,现在学习好linux是很有必要的,因为这个是嵌入式的核心.那 ...

最新文章

  1. 这届架构师成功的理由,它排第一……
  2. 使用.Net Core实现的一个图形验证码
  3. C/C++ 按行读取文件
  4. JavaScript异步编程【上】 -- 同步和异步、事件循环(EventLoop)、微任务和宏任务、回调函数
  5. JavaScript-常用正则函数(适合忘记时看)
  6. C语言课程设计学生考勤管理系统
  7. Modbus是什么?与RS485协议区别与联系有哪些
  8. 浅谈测试小白到测试大牛的成长历程(分四个境界)
  9. 电磁仿真CST软件学习笔记:模型创建篇(更新中)
  10. Linux查询系统上次启动时间last reboot、上线时间uptime
  11. 单片机八灯交替闪烁c语言代码,单片机闪烁灯汇编语言源代码大全(四款闪烁灯的汇编语言源代码)...
  12. android实现仿真键盘(KeyboardView适配)
  13. 30硕士毕业,工作一年的码农,看不到前景,未来怎么办?要不要转行?
  14. linux chroot命令使用
  15. 2020李宏毅深度学习hw1
  16. java节假日算法_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法...
  17. 抓包工具 Fiddlerwireshark
  18. 再见了,2020,你好,2021。
  19. 如何将embed嵌入式Flash网页播放器替换为CKplayer
  20. SV660PCB,伺服驱动器PCB,原理图,和BOM

热门文章

  1. Mysql修改字段名、修改字段类型
  2. 阿里云香港服务器速度快吗?
  3. 如何制作纺织产品标签
  4. 王道中数据结构的排序算法
  5. 电脑卡住了怎么保存excel_win7系统遇到死机没及时保存excel文件该怎么办
  6. Excel2016 保存\复制 卡死问题解决
  7. SARscape之DInSAR处理(双轨法)
  8. maven parent 覆盖_Maven 最佳实践之 · 一个好的 parent 依赖基础
  9. 如何将报表附件组件FastReport VCL旧版本升级到最新版本?
  10. 《分形艺术,当科学嫁给了艺术》作者:林晨 风达