1 / 5
文档名称:

VC串口编程执行效率.doc

格式:doc   大小:85KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

VC串口编程执行效率.doc

上传人:蓝天 2022/5/20 文件大小:85 KB

下载得到文件列表

VC串口编程执行效率.doc

文档介绍

文档介绍: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代码,仍能可靠地与现在的速度较快的、