我每次读取数据后都可以清除串口吗?

时间:2010-06-01 08:20:48

标签: c++ c windows winapi

我需要在再次读取数据之前从串口读取数据时清除串口数据?我在windows xp上使用c / c ++

我该怎么办?

提前完成。

3 个答案:

答案 0 :(得分:3)

清除接收缓冲区几乎总是错误的。串行端口通信本质上是异步的,您可能会删除正常数据。只有当您使用主从协议(设备仅在主机查询时才传输)才允许清除。但是,如果接收缓冲区实际上有数据要清除,那么你忽略了协议违规,你从不想要忽略的东西。

可靠的串口通信需要协议。校验和用于验证消息完整性和ACK / NAK握手以从数据损坏中恢复。查看RFC 916中描述的RATP协议。广泛忽略btw,但我过去曾使用过它。它唯一的弱点是缓冲连接尝试。

答案 1 :(得分:1)

C ++标准具有用于写入文件,屏幕和日志的接口。它还具有用于从文件读取和从“标准输入”读取的接口。没有与串行端口,网络连接等交互的标准方法。

幸运的是,您的操作系统或平台将具有此接口。但是(1)你需要做什么才能从串行连接中读取,以及(2)连续读取之间需要做什么,以及(3)如何做到这一点都取决于平台。


查看some Microsoft Documentation,您根本不需要“清除端口”。但是当一个标志被设置为发出信号时 - 例如发生错误 - 那么你需要在继续之前重置标志。当然,您可以在之后重置标志,处理标志要发出的信号。

答案 2 :(得分:1)

以下解决方案不是最好的,但它适用于许多情况:

从串口读取大量字节,将其呈现为空。例如:

的ReadFile(端口,TMP,4096,&安培; ioread,NULL);

tmp []:是保存您不想要的数据的变量(刷新数据) ioread:读取的字节数

因此上面将从串口读取4096个字节。您可以增加数字以确保在语句后最终得到一个干净的端口。

P.S。我在Visual Studio 2010,C ++,Windows 7 - 64位

中使用过它