Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在读取之前刷新串行端口?_C_Windows_Serial Port - Fatal编程技术网

C 如何在读取之前刷新串行端口?

C 如何在读取之前刷新串行端口?,c,windows,serial-port,C,Windows,Serial Port,我试图让一个微控制器通过串行端口与Windows PC通信 在我看来,Windows正在缓冲COM1上的输入,这样,如果我停止两个程序的运行,然后只重新启动Windows程序,它仍然会从微控制器程序的上一次运行中接收一些输出 打开COM1后,我可以在开始读取之前刷新它的接收缓冲区吗?是否有函数调用来执行此操作?我相信您要查找的函数是,当您打开端口时,您将从CreateFile()获得的句柄传递给该函数。我不确定,但我相信串行端口也会在每次打开时自动刷新 但是,更好的方法是使用ReadFile(或

我试图让一个微控制器通过串行端口与Windows PC通信

在我看来,Windows正在缓冲COM1上的输入,这样,如果我停止两个程序的运行,然后只重新启动Windows程序,它仍然会从微控制器程序的上一次运行中接收一些输出


打开COM1后,我可以在开始读取之前刷新它的接收缓冲区吗?是否有函数调用来执行此操作?

我相信您要查找的函数是,当您打开端口时,您将从CreateFile()获得的句柄传递给该函数。我不确定,但我相信串行端口也会在每次打开时自动刷新


但是,更好的方法是使用ReadFile(或ReadFileEx),直到遇到有意义的内容。为此,串行协议通常设计有一个或多个同步字节。除非您正在编写终端程序或类似程序,否则无论如何您都必须这样做,因为Windows PC永远不会与微控制器同步

您是否定义了某种协议,告诉您每个数据包有多少字节?刷新和读取之间的区别是什么?释放,更重要的是,他如何知道数据来自前一个事务或当前事务,这样他就知道该扔掉什么,保留什么了?@Aniket True。伦丁的回答涵盖了这一点,很好!:)+(也许是答案)PurgeComm看起来很棒。有一个双向协议(类似于CTS/RS)有意义吗?发送方等待接收方说它准备好接收了吗?(如果弹劾发送方在开始传输之前有一个阻塞呼叫等待该呼叫(即使用数据),或者使用CTS/RTS,会更简单吗?@Mawg我建议您只使用软件握手。RS-232的各种信号通常比它们的价值更麻烦。特别是因为您的微控制器程序必须以RS-232兼容的方式实现RTS/CTS,因为这些引脚不是标准MCU UART硬件的一部分。+1所以(作为答案),我的接收器应该在启动时发送“ok,gimme data”&我的发送器在收到数据之前不应该发送?@Mawg这是一种可能性。微控制器是否关心是否有人监听?它是否根据电脑的指示采取行动?如果是这样,那么你描述的握手方式是合适的。如果没有,那么发件人也可以发送垃圾邮件“here is data,here is data,here is data”,其中消息的第一部分是某种同步字节,最好是不太可能出现在实际数据中的字节。感谢您的帮助