基于VC的串行通信技术应用实例
作者:出处:论坛责任编辑: 方舟[2003-10-13 18:04 ]
本文将介绍在 Windows平台下串行通信的工作机制和用 VC设计串行通信程序的 编程方法
串行通信的操作方式
下面我们将介绍串行通信的几种操作方式:
同步方式
同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的 数 据,直到规定数目的 数据全部被读出或设定的超时时间已到时才返回。例如 :
COMMTIMEOUTS timeOver;
memset(timeOver,0,sizeof(timeOver));
DWORD timeMultiplier,timeCo nsta nt; timeOver.ReadTotalTimeoutMultiplier=timeMultiplier; timeOver.ReadTotalTimeoutC on sta nt=timeC on sta nt; SetCommTimeouts(hComport,timeOver);
ReadFile(hComport,i nBuffer, nWan tRead,n RealRead,NULL);
COMMTIMEOUT构用于设置读写函数的等待时间。
在ReadFile函数中hComport为待读串口句柄;in Buffer 为输入缓冲区大 小;nWantReac为每次调用 ReadFile时,函数试图读出的字节数;nRealRead 为实际读出的字节数;最后一个参数值NULL代表ReadFile将采用同步文件读写 的方式。
如果所规定的待读取 数据的数目nWantRead较大且设定的超时时间也较长, 而接收缓冲区中数据较少,则可能引起线程阻塞。解决这一问题的方法是检查 COMSTAR构的cblnQue成员,该成员的大小即为接收缓冲区中处于等待状态的 数据的实际个数。如果令nWantRead的值等于COMSTAT.cblnQue就能较好地防 止线程阻塞。
查询方式
查询方式,即一个进程中的某一线程定时地查询 串口的接收缓冲区,如果缓 冲区中有数据,就读取数据;若缓冲区中没有数据,该线程将继续执行,因此会 占用大量的CPU时间,它实际上是同步方式的一种派生。例如:
COMMTIMEOUTS timeOver; memset(timeOver,0,sizeof(timeOver)); timeOver.Readl ntervalTimeout=MAXWORD; SetCommTimeouts(hComport .timeOver);
ReadFile(hComport.i nBuffer. nWan tRead.n RealRead,NULL);
除了 COMMTIMEOU结构的变量timeOver设置不同外,查询方式与同步方式 在程序代码方面很类似,但二者的工作方式却差别很大。尽管 ReadFile采用的 也是同步文件读写方式,但由于timeOver的区间超过时间设置为 MAXWOR所 以ReadFile每次将读出接收队列中的所有处于等待状态的 数据,一次最多可读 出nWantReac个字节的数据。
异步方式
异步方式中,利用Windows的多线程结构,可以让串口的读写操作在后台进 行,而应用程序的其他部分在前台执行。例如:
OVERLAPPED wrOverlapped;
COMMTIMEOUTS timeOver;
memset(timeOver.O.sizeof(timeOver)); DWORDtimeMultiplier,timeCo nsta nt; timeOver.ReadTotalTimeoutMultiplier=timeMultiplier; timeOver.ReadTotalTimeoutC on sta nt=timeC on sta nt; SetCommTimeouts(hComport,timeOver); wrOverlapped.hEve nt=CreateEve nt(NULL.TRUE,FALSE,NULL);
ReadFile(hComport,i nBuffer, nWan tRead,n RealRead,wrOverlapped); GetOverlappedResult(hComport,wrOverlapped, n RealRead,TRUE);
ResetEve nt(wrOverlapped.hEve nt);
上面代码中的ReadFile由于采用了异步方式,所以它只返回 数据是否已开 始读入的状态,并不返回实际的读入 数据,即ReadFile中的nRealRead无效。 实际读入的数据是由GetOverlappedResult函数返回的,该函数的最后一个参数 值为TRUE表示它等
您可能关注的文档
- 培训室及课堂纪律要求.docx
- 培训工作经验交流发言稿.docx
- 培训工作经验交流.docx
- 培训工作评估报告.docx
- 培训师授课竞赛评分标准.docx
- 培训开训典礼主持稿.docx
- 培训思想转变与观念更新.docx
- 培训教师培训工作管理制度.docx
- 培训指导手册.docx
- 培训方法一览表.docx
- (正式版)DB51∕T 1867-2014 《袋栽黑木耳生产技术规程》.docx
- (正式版)DB51∕T 2413-2023 《油橄榄密植丰产栽培技术规程》.docx
- (正式版)DB51∕T 2436-2017 《川菜东坡一品肉烹饪工艺技术规范》.docx
- (正式版)DB51∕T 2396-2017 《农村电子商务服务站(点)服务与管理规范》.docx
- (正式版)DB51∕T 2419-2017 《桢楠扦插育苗技术规程》.docx
- CN105145773B 一种无花果曲奇饼干及其制作方法 (江苏农林职业技术学院).docx
- CN105203825A 微测量电极的制作方法和热电势的测量方法及相关装置 (国家纳米科学中心).docx
- CN105137533B 一种啁啾光纤光栅及其制作方法 (南京航空航天大学).docx
- (正式版)DB51∕T 2453-2018 《巴山新居公共管理指南》.docx
- (正式版)DB51∕T 1892-2014 《川西北地区沙化土地治理技术规程》.docx
原创力文档

文档评论(0)