VC串口发送数据的几个疑问
发布网友
发布时间:2022-04-26 18:45
我来回答
共2个回答
热心网友
时间:2023-10-21 17:28
通过你的问题,我感觉,你想要一种安全的数据接收方式,那么你需要使用同步方式,同步方式是一种阻塞方式的数据传输,这样你可以安全的获的所有数据。
1.对于问题1,你的问题2既是答案,使用ClearCommError函数,第三个参数.cbInQue可获得缓冲区中未读的数量。
2.从物理上,每次字节到来都会触发EV_RXCHAR,但是毕竟标志位只有1个,当多个字节快速到来时,标志位被重复写入,这种情况下,EV_RXCHAR的触发次数与接收到的字节数是不同的。如果对方的传输速度慢(频度),可以通过ClearCommError这个函数获得缓冲区中有多少个数据没有读出,按照这个数将其一次读出。如果频度比较高,只能使用一个监控线程不断的从缓冲区中读出,直到没有数据为止。
3.这个就是同步和异步的问题了,如果用同步方式,对方传1个,你不接收他是不会传第二个的,但异步方式,不同,不论对方是否接收,数据都会被传输,使用何种方式,看你项目的应用而定。
4.起始位、停止位、校验位,是根据你设定的通信格式,协议芯片帮你加入的,如果你使用标准的串口协议接收的,在你接收到数据时,这些标志都会被清除掉的,即数据在接受方,软件方面是透明的,但这些标志在线上是存在,使用示波器,可以明显的看到。
5.一般地,使用软件协议,即在开始处加上同步头、传输量等,接收方在检测到同步头后开始接收有用数据。
6.补充一下,如果你需要握手,还需要设定EV_CTS、EV_CTS等,这些标志是专门用来控制数据传输是否开始的标志,当然,这也将是硬线增加,这得视你的接口情况来决定是否能使用。
----不知道回答明白没,如需要更详细的,请QQ me[19226004],注明串口问题,我做过很多串口方面的项目,可以交流一下。
热心网友
时间:2023-10-21 17:28
我看你很有基础,所以直接告诉你:
请使用 waitforsingleobject, 必须做成异步的!这就是得到数据的关键