串口多线程 卫星导航实例

串口多线程 卫星导航实例

ID:13154879

大小:33.50 KB

页数:5页

时间:2018-07-21

串口多线程 卫星导航实例_第1页
串口多线程 卫星导航实例_第2页
串口多线程 卫星导航实例_第3页
串口多线程 卫星导航实例_第4页
串口多线程 卫星导航实例_第5页
资源描述:

《串口多线程 卫星导航实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、单片机在线编程专家VC++】在VC++编程息和事件;工作者线程主要用来处理应用程序的后台任务。应用程序可以通过调用AfxBejinThread()函数自动创建一个CwinThread对象,从而开始一个线程。线程的终止条件有如下4种:线程函数返回;线程调用ExitThtead()退出;异常情况下用现成的句柄调用TerminateThread()退出;线程所属的进程被终止。3、多线程在RS-322应用3.1串口通信对线程同步因为同一进程的所有线程共享进程的虚拟地址空间,而在WINDOWS中线程是汇编级中断,所以才有可能实现多个线程同时访问同一个对象。这些对象可以是

2、全局变量、MFC的对象、MFC的API等。而串口通信对每个串口对象只提供一个缓冲区,发送接收都要用到这一个缓冲区,所以要求必须建立同步线程执行,使得一个时刻只能进行一种线程操作,以免通信出错。串口通信处理的多个线程需要协调运行,一个线程必须等待另一线程结束才能开始,在处理一个线程的同时必须把其余待处理的线程挂起等待,以减少其余待处理线程对CPU的资源占用,正处理的线程一旦处理结束则通过线程间的通信发出信号来击活被挂起的线程中的一个线程进入处理。VC++提供了以下4个同步对象来协调实现多线程的并行:Csemaphore信号灯对象,允许一定数量的现成访问某个资源,

3、用来控制访问共享资源的线程数量。Cmutex互斥量对象,一个时刻至多只允许一个线程访问某个资源,未被占用时处于有信号状态,可实现对共享线程的互斥访问。Cevent事件对象,用于使一个线程统治其余现成某个事件正发生,所以可以用来实现禁止对某个资源的访问,直至该线程结束释放资源使资源处于有信号状态,从而使被挂起的线程被通知得以执行CcriticalSection临界区对象,将一段代码置入临界缓冲区,并只允许一个线程进入执行这段代码,该临界缓冲区仅在创建这个缓冲区的进程中有效。3.2等待为了实现线程在资源对象被占用时把自己挂起而阻塞自己执行,等待资源空闲信号停止阻塞

4、继续执行,从而减少对CPU的资源占用,WIN32API中提供了两个等待函数来实现这一功能:WaitForSingleObject()(只可监控单个同步对象)WaitForMUultipleObjects(可同时监控多个同步对象)。在监控系统中,处理串口通信只是CPU的一部分事物,所以必须使用等待函数提高程序的执行效率。3.3的重叠I/O方式MFC对于串口通信是作为文件设备来处理的,用CreateFile()打开串口获得一个串口句柄。打开后由SetCommState()进行串口端口配置:缓冲区设置、超时设置、数据格式设置等等。设置成功后就可以调用ReadFile

5、()和WriteFile()进行数据的读与写,用WaitCommEvent()监控通信事件。CloseHandle()用于关闭串口。在ReadFile()和WriteFile()进行串口读写时可以采取同步执行方式也可以采用重叠I/O方式。由于采用同步执行方式,被调用的函数必须执行结束后才被返回,这必然要求除正被执行线程外其余线程被挂起等待,效率低;而采用重叠I/O方式,被调用的函数不必等执行结束后才被返回,而是可以立即返回,因为I/O操作在后台执行,这样其他线程就不必等待马上可以进行处理其他事物,实现了不同线程可以在同一串口句柄上基本上接近同时实现读写操作,实

6、现重叠,是通信的实时性提高。采用重叠I/O方式,线程必须创建OVERLAPPED结构攻读写函数使用,该结构最重要的成员是hEvent事件句柄。它将作为线程的同步对象使用,读写函数完成时hEvent处于有信号状态,表示可以进行读写操作;读写函数未完成时hEvent被置于无信号状态。4、多线程应信程序中的实现应用程序需专门建立一个串口通信类,并在串口通信相关程序段中应用相关函数实现多线程的应用,下面给出实现多线程应用的的关键函数的核心代码。1).专门针对COM1的初始化程序段(只写出涉及多线程应用的关键步骤)BOOLInitComm()//串口初始化{HANDLE

7、m_hComm;COMMTIMEOUTSm_CommTimeouts;m_hComm=CreateFile(“COM1”,//这里只使用串口1,如要对多个串口初始化需先在初始化前进入代码临界区,以保证在某时刻只对一个串口初始化GENERIC_READ

8、GENRIC_WRITE,//定义串口打开类型为可读写0,//以独占串口资源模式打开串口NULL,//对该串口不设置安全属性OPEN_EXISTING,FILE_FLAG_OVERLAPPED,//设置重叠I/O模式0;)if(m_hComm==INVALID_HANDLE_VALUE)//串口打开不成功{ret

9、urnFALSE;}m_CommTim

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。