多线程串口通信技术在GPS中的应用
置显示在电子地图上。
GPS导航系统框图如图1所示。
3.2 具体实现
系统首先对线程在相应的头文件中说明,然后在程序初始化时加入创建程序代码,这样创建后,线程就可以和主线程并发执行了。主线程、入库线程、显示线程与一般的编程处理相同,所以下面着重说明串口监视线程。
对串口的操作采用基于多线程编程的CSerialPort类,其工作流程如下:首先设置好串口参数,再开启串口监测工作线程。串口监测工作线程监测到串口接收到的数据流、控制事件或其他串口事件后,就以消息方式通知主程序,激发消息处理函数进行数据处理,这是对接收数据而言的;发送数据可直接向串口发送。应用程序流程如图2所示。
编程步骤如下:
(1)建立程序
建立一个基于单文档的MFC应用程序CSerial-PortteST,其他步骤保持缺省状态。
(2)添加类文件
将SerialPort.h和SerialPort.cpp两个类文件复制到工程文件夹中,用Project-Add to Project-Files命令将上述两个文件加入工程,并在任何要调用这个类的模块中加上#include SerialPort.h文件。
在视类头文件中定义串口类的对象:CSerialPortm_Port。
(3)人工增加串口消息响应函数OnCommunica-TIon(WPARAM ch,LPARAM port)
首先在CSerialPortTestView.h中添加串口字符接收消息WM_COMM_RXCHAR(串口接收缓冲区内有一个字符)的响应函数声明,即:
在主线程初始化串口后创建CommThread函数进入死循环,线程一直监视串口事件,当读串口事件发生,读取串口接收到的数据,向主线程发自定义消息WM_COMM RXCHAR,通知主线程在相应的消息响应函数中进行数据处理,当收到主线程的写串口命令时,将缓存中的数据写到串口。
(5)在OnCommunicaTIon()函数中进行数据处理每当串口接收缓冲区内有一个字符时,就产生一个WM COMM RXCHAR消息,触发OnCommunica—TIon函数。这时就可以在函数中进行相应数据处理,提取出时间、经纬度、速度等定位的关键数据,然后将这些数据保存到数据库。
4 结 语
串行通讯在通讯领域被广泛应用。利用基于多线程的第三方串VI通信类CSerialPort很好地解决了由于串口长时间占用CPU而引起的线程堵塞等问题,编程简单、方便、可移植性强,对于其他类型的串口通信问题均可采用。该程序由Microsoft Visual C++6.0编译,在Windows XP下运行通过。
- 一种柴油发电机组远程监控平台的实现(09-05)
- VC串口通信的数据采集系统设计(10-09)
- 常用的单片机模块电路分享(主要为通信电路)(03-19)
- 51单片机串口通信原理与应用(02-08)
- 基于Linux的ARM/单片机串口通信设计(04-24)
- 基于Linux环境下串口通信的应用设计(04-24)