下载此文档

VC串口编程执行效率.doc


文档分类:IT计算机 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
VC串口编程的执行效率
vc串口编程是一个古老的话题,好多年前跑得很好的程序,现 在依然运行得很好! CPU的速度越来越快,使得程序的执行感觉效 率越来越不是问题,硬件的进步掩盖了软件编程的效率差别。本文以 两种不同VC串口编程思路为例,与思路一最大的不同是,采用readfile()的多字节读取方式。
接收Thread,首先purge UART
上来就Readfile ( ...,RXBUFF起始地址,要读取字节数, 指向异步structure->event 的指针)。
Asynchronous Readfile 有两个结果, pending 和readfile return immediately。 (if pending) bwait=TRUE; else bwait=FALSE;
WaitForMultipleObjects(3, port->m_hEventArray, FALSE,
INFINITE);
If (bwait) GetOverlappedResult(); (n个字节) else do nothing!(只是简单地忽略) 接下来,同样是
Sendmessage(..., ...,RXBUFF 首地址,...);
返回开始的readfile();
两种思路最大的不同是对readfile()的应用。
异步Readfile (端口HANDLE, RXBUFF起始地址,要读取字节数,
指向异步structure->event的指针)。只用指定要读取的最大个数, 接收缓冲区地址,剩下的由系统自动异步完成,用event的signaled state来指示操作的完成。当然可以readfile。一次异步读一个字节, 就象思路一,这对于必较松散的UART通信,来一个处理一个,一 口气来n个字节,循环n次即可,思路很简洁、直观!不用开缓冲, 一个byte变量足矣。
一个一次读取一字节的Asynchronous ReadFile(),粗略地从微观上 看: 应用层readfile。,»kernel» I/O manager» 上层file driver,中 间要径过很多各种drivers » UART driver读取一字节,放到指定 位置,触发event signaled state,最后由I/O manager返回应用层。这 还是直接串口操作。如果用现在流行的USB转UART,那至少还要 增加USB driver层。一个字节的异步readfile(),要经过这么多关 口,串越n多层,这是由系统封装的,对于app层的readfile() API调 用来说,一次读一个,读n个感觉差别不大,参数不同而已,现在
CPU的速度足够快,虽然一次一个效率不高,感觉响应速度上并无 明显差别。当然如果driver写得足够好,可自动将n个连续的一次一 字节的readfile,拼成一个一次n字节的readfile ,那另当别论。
异步一次一个字节的ReadFile(),有其存在的理由。早先的单片 机速度与PC无可比性,UART也没DMA支持,一次一字节的异步 ReadFile很好地,在保证VC代码效率前提下,使PC与慢速的单片 机可靠通信。而且这种方式,VC代码的兼容性较好,多年前写的 VC UART代码,仍能可靠地与现在的速度较快的、

VC串口编程执行效率 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人蓝天
  • 文件大小85 KB
  • 时间2022-05-20