用多线程实现GPS接收机与PDA在Windows CE下的串口通信
- 格式:pdf
- 大小:309.45 KB
- 文档页数:4
《自动化技术与应用》2007年第26卷第09期126 | T echniques of Automation & Applications 经验交流Technical Communications基于Windows CE 的掌上设备与GPS接收机的串行通信李娜,许童羽,李征明,徐静(沈阳农业大学 辽宁 沈阳 110161)摘 要:GPS是目前应用最广泛的新一代卫星导航与定位系统,Windows CE是一个开放的、可升级的基于掌上型电脑类的嵌入式操作系统。
本文简要介绍了GPS系统及Windows CE的串行通信,详细描述了基于Windows CE的掌上设备与GPS接收机的串行通信。
关键词:GPS;Windows CE;串行通信中图分类号:TN915.1 文献标识码:B 文章编号:1007-7241(2007)09-0126-04The Serial Communication of the Palm Equipment based on theWindows CE and the GPS ReceiverLI Na, XU Tong-yu, LI Zheng-ming, XU Jing( Shenyang Agriculture University, Shenyang 110000 China)Abstract: GPS is a new generation of the satellite navigation and positioning system which is the most widespread applied atpresent,and Windows CE is an open and embedded operating system based on the palm computer. This paper discusses the serial communication between the palm equipment based on the Windows CE and the GPS receiver.Key words: GPS; Windows CE; serial communication收稿日期:2006-12-291 引言GPS(Global Positioning System)即“全球定位系统”的简称,是具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。
多线程串口通信技术在GPS导航中的应用作者:冯正韩焱王黎明来源:《现代电子技术》2009年第05期摘要:GPS导航系统需要实时获取来自接收机串口的定位数据,在对串口实时监控的同时还可以在前台进行一些其他的操作,利用基于多线程的串口通信编程思想方法可以很好地解决这一问题。
介绍多线程的基本概念和串口通信编程技术,分析了GPS导航系统的功能和需求,着重阐述了采用基于多线程的CSerialPort类的串口通信方法来获取定位数据,并且给出了CSerialPort类的使用方法。
经过调试,程序运行平稳。
关键词:多线程;串口通信;CSerialPort;GPS导航中图分类号:TP399文献标识码:B文章编号:1004-373X(2009)05-028-03Application of Multi-thread Serial Port Communication Technology in GPS Navigation System FENG Zheng1,HAN Yan2,WANG Liming2(1.National Key Laboratory of Electronic Testing Technology,North University ofChina,Taiyuan,030051,China;rmation Detection and Treatment Institute of Technology,North University ofChina,Taiyuan,030051,China)Abstract:The GPS navigation system needs not only gaining real-time orientation data from the receiver serial port but also operating other somethings,the way that based on the multi-thread and the serial communication programming technology theory can solve this question.The multi-thread basic concept and the serial port communication programming technology are introduced,and the GPS navigation system′s function and the requirement are analysed,real-time orientation data by using CSerialPort class based on the multi-thread,and the application method of CSerialPort class are given.After the debugging,the program runs steady.Keywords:multi-thread;serial port communication;CSerialPort;GPS navigation0 引言GPS(Global Position System)具有全球性、全天候性优势的定位、定时、测速系统,用户利用GPS接收机接收卫星发射的信号,从而获取当前位置的大地坐标、高程和时间等信息,达到定位、导航或测量高程的目的。
第46卷 第3期 武汉大学学报(自然科学版) V ol.46 N o.3 2000年6月 J.W uhan U niv.(N at.Sci.Ed.) June,2000,373~375文章编号:0253-9888(2000)03-0373-03基于Windows多线程环境下的串口通信陈淑珍,石 波(武汉大学电子信息学学院,武汉430072) 摘 要:根据串口通信的基本原理,结合W indow s环境下的多任务并发机制,采用Window s的多线程技术来实现串口动态实时通信.有效地解决了在串口通信中的实时响应问题,降低了数据的丢失率,提高了系统的可靠性.同时提出了在Window s环境下实现串口通信的一般方法和步骤.实践证明,这种结合多线程技术的串口通信方法具有很强的实用性.关 键 词:多线程;串行通信;实时查询中图分类号:T P311.11 文献标识码:A 在实际的工程应用中,应用程序经常需要具备与外围设备进行通信的能力.在与串口,调制解调器,或是通过电话线进行通信的应用程序中,异步串行通信是一种重要的通信手段.在单任务的操作系统中,应用程序不能处理通信过程中的突发和并发事件,这种缺陷会引起数据丢失和不可靠性.而Window s基于线程的多任务并发机制使得应用程序能同时执行不同的任务,达到了降低数据丢失率,提高系统可靠性的目的.1 串口通信的原理和机制不论何种通信,背后都需要一个通信协议的支持.串口通信大多采用了美国电子工业协会(EIA)于1969年制定的RS-232标准[1].RS-232标准规定了数据终端设备和数据通信设备之间的连接和通信规则.该协议运用RTS(Request to Send)和(Clear to Send)信号来实现串口和外围设备的硬件“握手”,从而建立通信双方的连接和应答.在通信的连接和应答完成以后,双方就可以在误差允许范围内进行串行通信.由于Window s是一个基于消息驱动的操作系统,它的很多消息是从硬件反馈过来的.Window s 不允许程序开发人员直接和硬件打交道,在串口通信方面提供了一组API系统函数来管理串口,这对减低编程工作量,提高系统的稳定性和安全性都是很有好处的.在Win9x操作系统中,对串行通讯设备的操作如同文件的操作一样:串行通讯设备的打开、读写和关闭等操作均与文件操作相同,这和以前Win3x中的通信方式不同.由于w in9x系统中取消了串行通讯中的特定消息WM_COMM NOTIFY(外围通讯设备一有相应事件发生,该消息就会被传送),使得应用程序工作于“事件驱动”方式时,应创建专用的线程来监视有关的串行通讯设备.●打开和关闭串口.通信会话以调用CreateFile函数开始,为读、写操作打开串口.为实现串口的排他性访问,共享标志应设置成false,创建标志应为o pen_exiting,模板句柄应为null,同时返回串口句柄.通信会话通过调用CloseHandle函数来关闭串口占用的内存句柄,释放相应的串口资源.●初始化和配置串口.一旦串口处于打开状态,Window s就可以给串口分配接受和发送缓冲区.缓冲区的大小既可以缺省,也可以指定(调用SetupComm函数).配置串口需要设置串口通讯中特定事件的掩码(调用SetCom mM ask),只要串口中出现特定的消收稿日期:2000-02-22 基金项目:九五国家重点科技攻关项目(204980340)作者简介:陈淑珍(1946-),女,教授,现从事计算机网络与多媒体研究.息,相应的事件掩码就会返回.配置串口还需要设置串口通讯参数(调用SetCom mState(dcb)),例如波特率,数据位,校验位等,其中dcb是特有的参数数据控制模块.dcb可以预先通过GetCo mmState得到缺省值.●读、写串口.在读写串口之前,一定要进行超时设置(调用SetCo mmT imeOuts),因为在读、写过程中可能发生许多不可预见的事件.通过设置超时,能在通讯过程中避免意外发生,保障通讯的安全性.对串行的读写操作(调用ReadFile和WriteFile)就如同对文件的操作一样,在读写串口前需要清理串口通信中的错误信息,并返回当前串口设备的状态.Window s为串口通讯提供了异步I/O的通讯模式.当串口是通过重叠机制打开时,串口就具备了异步I/O的功能,使得应用程序可以后台读、写串口,在前台处理其他任务.这对节省CPU 的运行时间,提高系统的工作效率很有好处.●事件驱动响应.由于Window s是一个基于消息驱动的操作系统.它的许多事件来源于硬件设备,Window s设备驱动程序只是将这些事件进行处理,转换成相应的消息放到Windo w s消息队列中去.由于W in9x取消了串口通讯中的专有消息响应WM_COM M NOTIFY,使得用户进程需要自觉查询串口状态,并对相应事件作出响应[2].Win32API 提供了两个函数来完成这一功能:SetCom mM ask(hcomm,dwM ask),设置串口通讯中特定事件的掩码.不同的掩码对应不同的事件消息.WaitCom mEvent(hComm,&dw Event, &overlapped),在用SetComm Mask指定特定事件以后,就可以调用该函数来等待事件发生.一旦串口有事件发生,参数dw Event会返回相应事件的掩码,用户进程就可以作出相应的处理.同时WaitCom mEvent可以在同步或异步模式下运行.在异步模式下,WaitCommEv en在后台监视串口的状态,直到有事件发生返回(推荐采用).在实际的应用中,这一过程是用专有的监视线程来完成的.监视线程在捕获到特定串口事件以后,应通知主线程作出相应的处理.2 Windows的多线程技术多进程、多线程是Window s等占先式操作系统的一个重要特征.由于有了这种技术支持,使得提高系统的效率,完成多任务并发处理成为可能.进程是应用程序的执行实例,每个进程都具有自己私有的虚拟地址空间、代码、数据和其他系统资源.线程是进程中的一个独立的执行路径[3],一个进程可以拥有多个线程,它们共享同一进程的虚拟地址空间和进程资源.由于共享进程的虚拟地址空间,使得线程间的切换和通信非常便捷、迅速,适合应用程序并发处理的要求.在串口通信过程中,接收的通信请求往往是突发性的.而Windo ws在接收到串口通信请求后,只是和通信缓冲区进行交互,并不给应用程序反馈相应事件消息.应用程序必须自觉查询串口通信状态并作出相应的处理,基于Window s多任务环境下的线程技术,对于解决上述问题是一个很好的途径.操作系统会将CPU时间划分成许多时间片段,并按一定的优先级将时间片段分配给各个线程.各线程在各自的时间片段内共享CPU,从而实现了微观上轮次执行,宏观上并发运行的多任务机制.用户可以根据实际需要创建多个线程来完成系统功能.在支持多线程机制的操作系统中,多线程结构一般分为两个层次来实现,一是工作者线程,一是用户界面线程.工作者线程只具备相应的线程数据结构,对外表现为函数调用;而用户界面线程是线程执行的实体,是系统内核调用的单位,拥有独立的消息循环,两者有着明显的区别.多线程应用系统的设计包含创建线程、线程同步、终止线程3部分,其中关键是要处理好线程之间的同步问题,以避免线程之间出现资源竞争而引起几个线程甚至整个系统的死锁.通常线程中会有访问共享数据区的需求,由于线程运行的时间是不确定的,变量就会出现随机性.Window s提供了几种同步对象,来实现多线程间的同步[4].1)M utex互斥对象:在同一时间允许至多一个线程访问共享数据区.可以在多线程或多个进程间同步.2)Semapho re信号灯:允许一定数量的线程访问共享数据区,适合多个线程共享数据的同步.3)Event事件:事件对象是靠自身是否处于有信号状态以表明共享数据是否可访问,从而达到多线程间同步的目的.3 事件驱动的多线程串口通信在开发多媒体监控系统的实际应用中,由于既要实时监控外部串口的状态,又要及时读写串口的数据,还不能使进程一直等待,所以要产生一个查询374武汉大学学报(自然科学版)第46卷子线程来实时监控串口,另外产生一个处理子线程来读\写串口,而主线程进行正常的Window s 消息处理.主线程在初始化时,要完成串口的打开和初始设置工作,同时创建一个实时监控子线程和一个读写处理子线程.监控子线程一旦发现串口有信号,就会发送一个自定义消息给外部处理子线程,处理线程根据该消息即可判断在串行通讯过程中发生的事件,进而实时处理该信号.两个子线程之间以事件同步对象来实现同步,形成监视串口与读写串口的协调一致.下面介绍本文在开发多媒体监控系统时采用的实际串行通讯方法:●初始化串口和创建监视、读写子线程hcomm =CreateFile(“COM 1”,…);打开串口,返回串口资源句柄.SetupComm (hcom m ,4096,4096);分配串口缓冲区.DWORD dw EvtM ask=EV _RXCHA R;SetCo mmM ask (hcomm ,dw EvtM ask );设置串口通讯事件掩码.DCB dcb;//设备控制模块…;SetCo mmState (hcomm ,&dcb );设置串口通讯参数.m _pMT rd=AfxBeg inT hread(M pro c,…);m _pRT rd=Afx Beg inT hr ead(Mproc,…);创建并启动串口监视线程和读写处理线程●事件响应并在监视和读写子线程间切换在串口监视线程中设置串口通讯事件掩码及重叠机制,允许程序在后台等待串口通讯事件.W indo ws 提供了一个很重要的API 函数W aitComm Event,通过它可以检测到特定的串行通讯事件.当串口监视线程检测到指定通讯事件后,要实现与读写子线程的同步,并同时通过线程间消息传送机制通知读写子线程对串口作相应的操作.4 结束语在现代的操作系统中,支持多线程,提供多任务的并发机制是其一个很重要的特征.本文针对实际应用中对串口通信实时性的要求,提出了运用W indo ws 的多线程技术来实现异步串行通信的方法和步骤,有效的解决了在串口通信中出现的数据丢失和不稳定问题,提高了系统的效率和可靠性,实践证明这是一种有效的途径.参考文献:[1] Charlesa M .W indow s 95T elecom P rogr amming .Beijing :T sing hua U niver sity Pr ess,1998(Ch).[2] Go fton P W.M adter Ser ial Communication .Beijing :Electr ical Industr y P ress ,1995(Ch ).[3] Dav id J K .V isual C ++ 6.0T echnology I nside .Beijing :Hope elect rical P ress.1999(Ch).[4] M U ling -sheng.V isual C ++ 5.0U se A nd Develop .Beijing :T sing hua U niver sity Pr ess ,1998(Ch ).The Serial Communication Based on MultithreadingTechnique of WindowsCHEN Shu -zhen ,SHI Bo(Co llege o f Electr onic I nfo rma tio n,Wuhan U niver sity ,W uha n 430072,China )Abstract :Present a kind of method w hich is used to comm unicate betw een serial serial port and peripheral equipment dy namicly and real-time using m ultithreading technique based on the basic principle of comm unication and multitasking mechanism in the circumstance o f Window s.This method reso lves the questio n of Real -time answ ering in the serial com munication validly ,reduces lo sing rate of data and improves reliability of system .T his article pr esents a general metho d used in the serial com munication w hich is practical.Key words :multithreading;serial com munication;r eal-time query375第3期 陈淑珍等:基于W indo ws 多线程环境下的串口通信。
第28卷第4期2005年8月测绘与空间地理信息GEOMA TICS &SPA T I AL I N FORMA TI ON TECHNOLOGYVol .28,No .4Aug .,2005收稿日期:2004-11-24作者简介:任保刚(1960-),男,陕西西安人,工程师,主要从事GIS 和卫星导航方面的研究。
用多线程实现GPS 接收机与P DA 在W indo ws CE 下的串口通信任保刚1,陈波2,王仁礼2(1.珠海市测绘大队,广东珠海579000;2.信息工程大学测绘学院,河南郑州450052)摘要:简单介绍了GPS 接收机串口通信的基本概念和GPS 数据输出的格式。
主要论述了如何用多线程编程方法在W indows CE 下实现GPS 接收机与PDA 的通信,以及线程间的数据通信,线程调度,数据同步等问题。
关键词:多线程;接口通信;GPS;线程同步中图分类号:TP228.4 文献标识码:B 文章编号:1672-5867(2005)04-0057-04Co mmun i cati ons between GPS Recei ver and P DA withM ultithread Based on W i n dows CERE N Bao 2gang 1,CHEN Bo 2,WANG Ren 2li2(1.Zhuhai B rigade of Surveying and Mapp ing,Zhuhai 579000,China;2.I nstitute of Surveying and M app ing,I nfor mati on Engineering University,Zhengzhou 450052,China )Abstract:The basic concep t and out put data f or mat of GPS receiver’s serial communicati ons were si m p ly intr oduced .The paper de 2scribed how t o communicate bet w een GPS receiver and P DA with multithreaded p r ogra mm ing based on W indows CE .M ean while s ome issues such as communicating and synchr onizati on bet w een threads were discussed .Key words:multithreaded p r ogra mm ing;interface communicati ons;GPS;synchr onizati on bet w een threads0 引 言在掌上电脑(P DA,Pers onal D igital A ssistant )上开发GPS 数据处理软件中,首先要解决P DA 和GPS 接收机的串口通信问题。
多线程串口通信技术在GPS导航中的应用摘要:GPS导航系统需要实时获取来自接收机串口的定位数据,在对串口实时监控的同时还可以在前台进行一些其他的操作,利用基于多线程的串口通信编程思想方法可以很好地解决这一问题。
介绍多线程的基本概念和串口通信编程技术,分析了GPS导航系统的功能和需求,着重阐述了采用基于多线程的CSerialPort类的串口通信方法来获取定位数据,并且给出了CSerialPort类的使用方法。
经过调试,程序运行平稳。
0 引言GPS(Global Position System)具有全球性、全天候性优势的定位、定时、测速系统,用户利用GPS接收机接收卫星发射的信号,从而获取当前位置的大地坐标、高程和时间等信息,达到定位、导航或测量高程的目的。
卫星导航定位技术被广泛应用于海洋勘测、海洋工程、海洋开发和军事作战中,高精度、快捷方便、全天候等优良特性,使其越来越受到人们的青睐。
在GPS导航中,需要实时采集遵循NMEA0183协议的GPS数据,对数据进行处理后,通过ODBC接口将用户的位置、时间、速度等信息存到数据库,为以后在电子地图上实时显示目标位置提供依据。
为了避免由于一直等待串口I/0操作而引起的线程阻塞,要求程序在对串行端口进行实时监控的同时,可以在前台进行数据提取、保存、显示等操作。
为了解决实时性和多任务处理,避免某项任务长时间占用CPU,多线程编程是一个比较理想的选择。
1 多线程概述1.1 基本概念进程是程序在计算机上的一个执行实例,线程是程序中的一条执行分支,多线程就是在同一个程序中可以同时执行多个任务。
每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。
用户根据需要在应用程序中创建其他线程,多个线程并发地运行于同一个进程中。
一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源。
1.2 VCVC++环境对多线程技术的支持visual c++6.0中,MFC类库提供了对多线程编程的支持,使得多线程编程更加方便。
多线程技术在串口通信中的应用多线程技术在串口通信中的应用随着技术的不断发展,多线程技术在各个领域中得到了广泛的应用,其中之一就是在串口通信中的应用。
串口通信作为计算机领域中的一项基础技术,其应用范围较为广泛,如嵌入式系统、通信设备、工业控制等领域。
本文就多线程技术在串口通信中的应用进行了探讨。
首先,多线程技术能够很好地提高串口通信的效率。
在传统的单线程串口通信中,程序必须等待串口收到数据后才能进行后续的处理,这样会极大地降低通信的效率。
而采用多线程技术后,程序可以在接收数据的同时进行其他任务的处理,可以大大缩短通信的响应时间,提高通信的效率。
其次,采用多线程技术可以避免串口通信中的数据丢失问题。
在串口通信的过程中,如果数据的接收和处理速度不匹配,则可能会导致数据丢失的情况。
而使用多线程技术后,程序能够有效地处理接收和处理数据的速度不匹配的问题,避免数据丢失的情况发生。
再次,多线程技术可以提高程序的稳定性。
在串口通信中,如果程序由于某些原因崩溃或者停止,将会导致数据的丢失或者影响系统的正常运行。
而采用多线程技术后,程序可以在出现问题时及时停止相应的线程,保证系统的稳定性。
最后,采用多线程技术可以扩展串口通信的功能。
在传统的串口通信中,程序只能进行简单的数据接收和处理操作。
而采用多线程技术后,程序可以在接收和处理数据的同时进行其他功能的实现,如数据压缩、加密、解密等功能的实现,扩展了串口通信的应用范围。
综上所述,多线程技术在串口通信中的应用可以提高串口通信的效率、避免数据丢失的问题、提高程序的稳定性以及扩展串口通信的功能。
因此,采用多线程技术已经成为现今串口通信的主流发展趋势。
多线程在串口通信中的应用多线程在串口通信中的应用1. 多线程通信的方式(1)多线程间的同步通信:多线程间通过同步的方式实现数据的交换,主要用于在多线程并发条件下实现通信时,多个线程之间实现一致性数据同步,提高数据完整性。
(2)多线程异步通信:多线程异步通信最大的特点是可以很容易的支持大量的通信请求,而且不会因为网络延迟或分布式环境造成响应现场拖延,是构建网络应用非常有效的方式。
2. 串口多线程通信的特点(1)可以节省系统的网络资源:串口多线程通信可以减少对网络资源的占用,减少系统通信负荷,提高系统的性能。
(2)提高系统的稳定性:串口多线程通信可以有效的减少系统网络故障发生的风险,保证系统的稳定性,提高系统的可靠性。
(3)占用系统资源少:串口多线程通信占用系统资源比较少,不会因为通信时产生大量的中断等资源消耗,可以提高系统的效率。
3. 串口多线程通信的优势(1)减少网络流量:串口多线程通信采用并行通信模式,可以把信息数据发送到多个串口,减少网络流量;(2)减少资源消耗:串口多线程通信可以减少系统资源消耗,避免因大量通信内容占用系统资源影响系统性能;(3)可以支持大量客户端:串口多线程通信可以支持大量客户端并发,提高网络数据传输率,更加稳定,可以满足大多数的客户需求。
4. 串口多线程的应用(1)拨号-上网:串口多线程通信可以应用于在拨号系统上网,可以支持大量的拨号客户端同时上网;(2)通信网络:串口多线程可以应用于局域网和广域网,可以支持大量的客户端同时通信;(3)串口设备控制:采用串口多线程技术可以更好的控制网络上的设备,可以更加稳定的控制设备通信;(4)通信协议:串口通信协议支持多线程,可以支持大量的多线程通信,可以提高通信的安全性和可靠性;(5)系统控制:串口多线程可以支持系统间的控制,两个不同的系统可以通过多线程技术来实现数据交换,并可以用于控制系统的操作。
阐述在WiTadows CE嵌入式系统中,利用串口实现GPS和PDA通信的方法。
首先,介绍GPS信号的数据格式,并对系统的软硬件环境及串行通信进行描述。
最后,设计GPS信号处理模块,详细说明如何使用嵌入式程序语言开发串口通信程序,并给出具体步骤和部分实现代码。
关键词GPS PDA 串口通信Windows CE引言3PS即全球定位系统,主要有三大组成部分——空间星座部分、地面监控部分和用户设备部分。
其中(GPS空间星座部分、地面监控部分均为美国所控制;(GPS的用户设备主要由接收机硬件和处理软件组成。
用户通过用户设备接收GPS卫星信号,经信号处理而获得用户位置、速度等信息,最终实现利用GPS进行导航和定位的目的。
目前,许多GPS厂商遵循NMEAO183协议针对PDA掌上电脑开发许多导航型GPS。
GPS通过串口与PDA实现数据通信,利用(3PS传来的数据,可以在PDA上得到物体的实时位置、速度等参数。
通过与GIS系统的集成,可以在PDA上实现数字导航,很直观地在地图上了解所处的位置等信息。
下面具体说明如何实现GPS与PDA的串口通信。
1 串行通信每个Pocket PC都配有一个串行端口,以便PocketPC与外部串行设备之间进行通信。
串行端口的本质功能是作为芯片和串行设备之间的编码转换器。
当数据从芯片经过串行端口发送出去时,字节数据被转换为串行的位。
在接收数据时,串行的位将被转换为字节数据。
Windows CE使用了通信驱动程序Comm.drv,以便使用标准的Windows API函数发送和接收数据。
驱动程序通常由串口设备制造商提供,以便将硬件与Windows CE连接。
在程序设计中,模拟了一个COM6串口。
先使用Comm6.PoxtOpen打开串口,设置Comm控件的属性,Timer触发OnComm接收GPS信号的事件,实现GPS信号的实时接收。
GPS提供串行通信接口,串行通信参数为:波特率=57 600 bps,数据位=8位,开始位=1位,停止位=1位,无奇偶校验。
第28卷第4期2005年8月测绘与空间地理信息GEOMA TICS &SPA T I AL I N FORMA TI ON TECHNOLOGYVol .28,No .4Aug .,2005收稿日期:2004-11-24作者简介:任保刚(1960-),男,陕西西安人,工程师,主要从事GIS 和卫星导航方面的研究。
用多线程实现GPS 接收机与P DA 在W indo ws CE 下的串口通信任保刚1,陈波2,王仁礼2(1.珠海市测绘大队,广东珠海579000;2.信息工程大学测绘学院,河南郑州450052)摘要:简单介绍了GPS 接收机串口通信的基本概念和GPS 数据输出的格式。
主要论述了如何用多线程编程方法在W indows CE 下实现GPS 接收机与PDA 的通信,以及线程间的数据通信,线程调度,数据同步等问题。
关键词:多线程;接口通信;GPS;线程同步中图分类号:TP228.4 文献标识码:B 文章编号:1672-5867(2005)04-0057-04Co mmun i cati ons between GPS Recei ver and P DA withM ultithread Based on W i n dows CERE N Bao 2gang 1,CHEN Bo 2,WANG Ren 2li2(1.Zhuhai B rigade of Surveying and Mapp ing,Zhuhai 579000,China;2.I nstitute of Surveying and M app ing,I nfor mati on Engineering University,Zhengzhou 450052,China )Abstract:The basic concep t and out put data f or mat of GPS receiver’s serial communicati ons were si m p ly intr oduced .The paper de 2scribed how t o communicate bet w een GPS receiver and P DA with multithreaded p r ogra mm ing based on W indows CE .M ean while s ome issues such as communicating and synchr onizati on bet w een threads were discussed .Key words:multithreaded p r ogra mm ing;interface communicati ons;GPS;synchr onizati on bet w een threads0 引 言在掌上电脑(P DA,Pers onal D igital A ssistant )上开发GPS 数据处理软件中,首先要解决P DA 和GPS 接收机的串口通信问题。
在GPS 接收机和P DA 的数据传输过程中,P DA 的串行端口作为CP U 和串行设备间的编码转换器,提供了计算机与掌上电脑之间的数据传输通道[1]。
作为数据终端设备,GPS 接收机采用异步串行方式利用RS232串行二进制数据交换电缆接口将采集到的数据通过串行端口传输给掌上电脑。
由于GI S 和智能交通系统等软件对计算机CP U 的使用需求较大,而在传统的采用定时器来控制通信的方式中,对CP U 的占有量大,不利于数据的实时处理,降低整个系统的效率,甚至可能会导致数据丢失。
若采用多线程来实现GPS 接收机和P DA 的接口通信,就能充分利用W indows CE 编程多任务、多线程的优越性,提高CP U 的利用率,使整个系统具有更高的使用效率和稳定性。
1 GPS 输出的数据格式GPS 通过天空中分布的定位导航卫星全天候、连续实时、覆盖全球地发送定位导航和时间信息,对于人们的生活起着越来越重要的作用。
而GPS 接收机作为我们获得GPS 信号的手段,通过接收卫星信号解算出自身的位置、速度和其他信息,以实现定位导航及授时功能,显然有着极其重要的作用。
GPS 的数据输出分为两类:1)十进制ASC II 码。
易于识别和应用。
GPS 的统一标准格式NME A0183输出就采用这种格式。
目前广泛采用的是Ver2.00版本。
在NMEA0183协议中规定:GPS 信息通过ASC II 语句输出,每条语句以一个‘$’符号开始,以一个‘<CR ><LF >’序列结束,并且每条语句不能超过80个字符。
每条语句中,数据域以逗号隔开,在2个逗号之间,数据域可以为空。
表1所示为1条典型的NMEA0183输出语句。
2)二进制码。
虽不直观,但运算方便,在计算机中应用非常普遍。
GPS 的原始观测量、星历以及其他数据都采用了二进制编码。
二进制码中每一组数据包含3个部分:字头块、数据块和结束符。
字头块包括电文的标志和语句名,数据块包括全部数据,结束符包括校验和与回车换行。
表1GPS输出的ASC II码R M C格式Tab.l ASC II and R M C of GPS output $GPRMC,192456,A,3126.601,N,14025.794,E,10.8,0.0,220904,1.7,E,S322<CR><LF>$语句头标志GPR MC GPS输出R MC语句192456UTC_TI M E24h制标准时间,按hh/mm/ss格式,19:24:56A当前定位状态:A=有效,V=无效3126.601LAT纬度值,精确到小数点前4位,后3位:31°26.601′N N表示北纬,S表示南纬14025.794LON经度值,精确到小数点前5位,后3位:140°25.794′E W表示西经,S表示东经10.8对地数度:单位为节0.0方位角220904日期,按dd/mm/yy格式,2004年9月22日1.7磁偏角E磁变化方向S322校验位<CR><LF>结束标志2 W i n dows CE下的串口通信[3]W indows CE是M icr os oft公司W indows家族的新成员,是开放、可升级的32位与处理器无关的主流嵌入式操作系统,可以满足多种设备的需要。
W indows CE支持多种外设和网络系统,包括键盘、光笔、触摸屏、以太网卡、调制解调器、US B设备、打印机、音频设备和存储设备(如PC MC I A卡)等。
它可以在内存很小的执行环境中依然保持高效率和扩展性,多线程的特点,拥有串行端口的连接功能,它的模块化设计方式使得软件开发人员可以根据不同的开发产品来自己设计系统[2]。
M i2 cr os oft e Mbedded Tools封装了W indows AP I函数,使得W indo ws CE应用程序的开发变得简单易学。
利用e VC3.0开发P DA和GPS接收机的串口通信程序,可以直接利用W indows AP I的通信函数实现。
在W indows CE中,所有的设备都被看成是文件。
串口通信可以像访问普通文件那样通过AP I通信函数来实现,系统的虚拟驱动程序负责执行特定的工作。
串行端口在W indows CE下属于流接口设备,它是串行设备接口的常规I/0驱动程序调用和与通信相关的具体函数的结合。
串行设备被视为用于打开、关闭、读写串行端口的常规、可安装的流设备。
W indows CE的通信函数和其它大多数W indows的通信函数相同。
特别要注意的是,W in2 dow s CE不支持直接对串行端口的寄存器进行编程。
常用的串行端口函数介绍如下。
1)打开和关闭串口。
CreateFile函数用于打开串行口。
m_h DSComm=CreateFile(_T("COM1:")),GENER2 I C_READ|GENER I C_WR I TE,0,NULL,OPEN_EX I STI N G, 0,NULL)。
注意COM1后面要有一个冒号。
最后一个参数d wFlags And A ttributes必须为0,因为W indows CE只支持非重叠I/O。
第3个参数d wShare Mode也必须为0,通信端口不能像文件一样被共享。
这个函数的返回值是已打开的串行端口的句柄或者是I N VAL I D_HANDLE_VAL2UE。
关闭串口可以调用Cl oseHandle(m_h DSCo mm)。
2)串口设置。
串口设置主要是用DCB结构配置端口设置,包括波特率、停止位、数据位长度、校验位、流量控制和超时值等等。
首先打开串行端口,用Get CommState 函数获得当前打开的串口配置,然后根据需要修改DCB 成员,最后用Set Co mmState函数设置新的串口配置。
DCB m_dcb;//创建DCB变量Port.DCB.DCB length=sizeof(DCB);Get CommState(m_h DSComm,&m_dcb);//获取当前串口配置//修改DCB成员m_dcb.BaudRate=CBR_9600;//波特率m_dcb.Parity=NOP AR I TY;//校验位m_dcb.St opB its=ONEST OP B I T;//停止位m_dcb.ByteSize=8;//数据位长度…//设置新的串口配置Set CommState(m_h DSComm,&m_dcb)3)设置缓冲区大小和超时。
对串口来说,必须设置超时值,否则程序可能陷入到一个循环来等待来自串口的字符。
这对采用W indows CE的设备来说,将大大减少设备电池的使用时间,所以超时值是必须配置的。
另外一种解决办法就是采用多线程。
多线程将在下一部分讲述。
通常,配置超时值和配置串口类似。
首先用Get Com2 mTi m eouts函数获得当前串口的超时值,然后修改COM2 MTI M EOUTS成员,最后用Set CommTi m eouts函数设定超时值。
COMMTI M E OUTS m_Ti m eout;//定义对象//获取当前超时值Get CommTi m eouts(m_h DSComm,&m_Ti m eout);//修改COMMTI M EOUTS对象成员m_Ti m eout.Read I ntervalTi m eout=0xFFFFFFFF;m_Ti m eout.ReadT otalTi m eout M ulti p lier=0;85 测绘与空间地理信息 2005年m_Ti m eout.ReadT otalTi m eout Constant=1000;m_Ti m eout.W riteTotalTi m eout M ulti p lier=0;m_Ti m eout.W riteTotalTi m eout Constant=1000;//设定超时值Set CommTi m eouts(m_h DSComm,&m_Ti m eout);//设置缓冲区SetupCo mm(m_h DS Comm,4096,4096);PurgeComm(m_h DSComm,P URGE_RXCLE AR|P URGE_ TXCLE AR|P URGE_RXABORT|P URGE_T XABORT)) //清空缓冲区4)读写串口。