VC串口编程执行效率

VC串口编程执行效率

ID:44716179

大小:33.00 KB

页数:5页

时间:2019-10-25

VC串口编程执行效率_第1页
VC串口编程执行效率_第2页
VC串口编程执行效率_第3页
VC串口编程执行效率_第4页
VC串口编程执行效率_第5页
资源描述:

《VC串口编程执行效率》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、VC串口编程的执行效率VC串口编程是一个古老的话题,好多年前跑得很好的程序,现在依然运行得很好!CPU的速度越来越快,使得程序的执行感觉效率越来越不是问题,硬件的进步掩盖了软件编程的效率差别。本文以两种不同VC串口编程思路为例,从小处、简单处了解一下内在的VC串口软件执行效率差别。对一些简单的8位机,凭一个人的能力,尚能对这个小麻雀从软、硬件上系统地把握执行效率的问题。但对于PC上的VC程序来说,是博大精深!抛开硬件不说,软件分层架构,大体分driver、kernel、framework、app层。本来分层架构再加上VC的抽象思想,就是要封装细节、提供接口,

2、使层与层、类与类之间清晰、明了。系统提供的API、class拿来用就行了,就像IC一样,把精力集中在解决现实问题的层面,反正CPU够快,效率问题不是太紧迫,但如果细追效率问题也不太现实,只能靠内嵌测试工具和统计方法,本来系统复杂到一定程度,就呈现出统计特征。对于VC的串口应用编程来说,属app层编程。如果是两个winPCUART通信,标准硬件、API拿来用就行了,把精力集中在事物方面,底层的软、硬件进步了,看到的API接口还是一样的。但对于PC与单片机的串口通信,软硬件是不对等的。VCUART功能完备,单片机UART是精简版。多年前的VCUART程序,现在依

3、然运行良好,内在的效率是不同的。抛开细节,从app层面要说一下两种VCUART编程思路的效率,默认异步操作。思路一、以UART口收、发的字节为单位,event驱动。接收thread:WaitForMultipleObjects()阻塞,UART收到一个或n个字节(DMAFIFO决定n),Event触发,thread结束wait,ReadFile()可一次读一个,也可一次几个字节。此处一次读一个字节,循环n次!每读一个字节,sendmessage(),向窗口发收到charmessage。接收threadsendmessage()阻塞,直到窗口winproc处理

4、charmessage.(窗口若不是接收thread创建的,还要threadSwitch).返回到接收thread:WaitForMultipleObjects()阻塞。思路二、与思路一最大的不同是,采用readfile()的多字节读取方式。接收Thread,首先purgeUART上来就Readfile(…,RXBUFF起始地址,要读取字节数,指向异步structure->event的指针)。AsynchronousReadfile有两个结果,pending和readfilereturnimmediately。(ifpending)bwait=TRUE;el

5、sebwait=FALSE;WaitForMultipleObjects(3,port->m_hEventArray,FALSE,INFINITE);If(bwait)GetOverlappedResult();(n个字节)elsedonothing!(只是简单地忽略)接下来,同样是Sendmessage(…,…,RXBUFF首地址,…);返回开始的readfile();两种思路最大的不同是对readfile()的应用。异步Readfile(端口HANDLE,RXBUFF起始地址,要读取字节数,指向异步structure->event的指针)。只用指定要读取

6、的最大个数,接收缓冲区地址,剩下的由系统自动异步完成,用event的signaledstate来指示操作的完成。当然可以readfile()一次异步读一个字节,就象思路一,这对于必较松散的UART通信,来一个处理一个,一口气来n个字节,循环n次即可,思路很简洁、直观!不用开缓冲,一个byte变量足矣。一个一次读取一字节的AsynchronousReadFile(),粗略地从微观上看:应用层readfile(),>>kernel>>I/Omanager>>上层filedriver,中间要径过很多各种drivers>>UARTdriver读取一字节,放到指定位置

7、,触发eventsignaledstate,最后由I/Omanager返回应用层。这还是直接串口操作。如果用现在流行的USB转UART,那至少还要增加USBdriver层。一个字节的异步readfile(),要经过这么多关口,串越n多层,这是由系统封装的,对于app层的readfile()API调用来说,一次读一个,读n个感觉差别不大,参数不同而已,现在CPU的速度足够快,虽然一次一个效率不高,感觉响应速度上并无明显差别。当然如果driver写得足够好,可自动将n个连续的一次一字节的readfile,拼成一个一次n字节的readfile,那另当别论。异步一次

8、一个字节的ReadFile(),有其存在的理由。早先

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

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

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