本版专家分:208
结帖率:100%楼主 发表于: 2003-12-11 15:15:45
我在编程时遇到了如下情况:我用的是重叠的方式进行串口通信,开始我由计算机向单片机发送一个数据,此时单片机一直在发等待命令;在发完数据以后,我使用FlushFileBuffers函数来清空串口缓冲区,然后去读串口的数据,但是我使用ReadFile收到的还是上一次发的值(即单片机开始等待时,向串口发的值);于是我怀疑串口缓冲区没有被清空,我就用函数PurgeComm来强行清空缓冲区的数据,结果我成功的收到了单片机发过来的数据.我不清楚为什么我用flushfilebuffers函数不能清空,而用PurgeComm就可以?另外,还有一个问题是:计算机的串口缓冲区是分接受串口缓冲区和发送串口缓冲区,还是公用一个缓冲区?
分享到:
| 举报 |
编辑 删除
管理 回复次数:3本版等级:
本版专家分:13477
结帖率:100%得分:0 回复于: 2003-12-11 15:52:21
IfathreadusesPurgeCommtoflushanoutputbuffer,thedeletedcharactersarenottransmitted.
theflushfilebuffersfunction(asynchronousoperation)emptiestheoutputbufferwhileensuringthatthecontentsaretransmitted.
Note,however,thatflushfilebuffersissubjecttoflowcontrolbutnottowritetime-outs,anditwillnotreturnuntilallpendingwriteoperationshavebeentransmitted.
计算机的串口缓冲区是分接受串口缓冲区和发送串口缓冲区的,可以用SetupComm设定各自的大小
| 举报 |
编辑 删除
管理本版等级:
本版专家分:208
结帖率:100%得分:0 回复于: 2003-12-11 16:14:35
谢谢楼上的回答,你上面的是msdn里的原文.
里面对FlushFileBuffers的描述,与我遇到的问题遇到的不完全相同.我向单片机发送数据以后,我使用flushfilebuffers返回的值是非零的.说明此函数已经执行成功了.但是串口缓冲区没有被清空,是不是意味着没有满足"whileensuringthatthecontentsaretransmitted."条件.那么"whileensuringthatthecontentsaretransmitted."的中文确切意思是什么哪?把它理解为"当确保发送的数据被发送的时候";
| 举报 |
编辑 删除
管理本版等级:
本版专家分:13477
结帖率:100%得分:50 回复于: 2003-12-11 19:21:07
flushfilebuffers返回的值是非零只是说明该函数调用成功了,但是它的清除是滞后的,就是说直到缓冲区中的数据传输完毕才清除缓冲区。而PurgeComm是直接删除未传输的数据,。所以不同啊,其实你的问题是出在延时上,所以用PurgeComm就成功了
| 举报 |
编辑 删除
管理以上就是关于flushfilebuffers的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shenmilingyu/article-13481-1.html
那索罗斯