VxWorks环境下解析GPRMC格式GPS数据

需积分: 18 16 下载量 138 浏览量 更新于2024-09-17 收藏 2KB TXT 举报
"这篇文档是关于在VxWorks操作系统下,使用PC104扩展板从串口读取GPRMC格式的GPS数据的程序实现。GPRMC(Global Positioning System Recommended Minimum Specific GNSS Data)是GPS接收机输出的标准NMEA-0183协议中的一个基本报文,包含了地理位置、时间、速度等关键信息。本文档提供的代码片段展示了如何初始化串口、设置波特率和数据格式,并通过`select`函数监听串口数据,进而提取GPRMC电文的步骤。" 在VxWorks操作系统中,处理串口通信通常涉及到以下知识点: 1. **VxWorks操作系统**:VxWorks是一个实时操作系统(RTOS),广泛应用于嵌入式系统,尤其在航空航天、工业控制等领域。它提供了丰富的API和工具集,便于开发和调试。 2. **PC104扩展板**:PC104是一种紧凑型的计算机扩展标准,常用于嵌入式系统,可以增加额外的硬件功能,如串口通信模块。 3. **串口通信**:串口通信是通过串行接口进行数据传输的方式,常见于GPS接收机与主机间的连接。在VxWorks中,串口操作主要通过`fcntl.h`、`iolib.h`和`unistd.h`头文件中的函数来实现。 4. **GPRMC格式**:GPRMC报文是NMEA-0183协议的一部分,包含日期、时间、纬度、经度、速度、航向等信息,格式如下: ``` $GPRMC,HHMMSS.ss,A,DDMM.MMMM,N,DDDMM.MMMM,E,NN.N,K,MM.M,M,DDDD.HHMM,V*hh<CR><LF> ``` 其中,A表示有效数据,N/S表示南北纬,E/W表示东西经,K表示速度(节),M表示海里,V表示航行状态。 5. **串口初始化**:在`COM_init()`函数中,首先通过`open()`打开串口设备(这里是/tyCo/0,代表COM1),然后使用`ioctl()`函数设置串口选项,包括选择原始模式(OPT_RAW)、设定波特率(115200)以及设置数据位数(8位无校验)。 6. **数据读取**:`readGPS()`函数中,使用`select()`函数监听串口是否有可读数据。当有数据可用时,通过`read()`函数逐字节读取,并存储到缓冲区`accept_buf`中。GPRMC报文通常较长,因此需确保有足够的缓冲区空间。 7. **数据解析**:从`accept_buf`中提取GPRMC报文,可能需要解析字符串,例如使用`sscanf()`或自定义函数,将经纬度、时间等信息分离出来。 8. **并发处理**:在实际应用中,可能需要创建任务(tasks)或使用信号量(semaphores)来实现串口读取和其他任务的并发执行,确保系统资源的有效利用。 9. **错误处理**:在`readGPS()`函数中,如果`select()`或`read()`调用出错,会关闭串口并返回,这是错误处理的一种基本方法。 这个代码片段提供了一个基本框架,但实际应用中可能还需要完善异常处理、数据解析、时间和位置的计算等功能。同时,为了保证实时性和可靠性,还需要考虑串口重试、数据校验和流量控制等因素。