[英]Windows serial: discard all bytes received in the input buffer before a start bytes received
我正在做一个项目,我应该在我的 C++ 应用程序中解析传入的传感器数据。 传感器数据由 Arduino 通过串行通信发送到 Windows。 数据包含这样的字符串:
$12.345,12.345,12.345,12.345*(+ 换行和回车)
传感器数据可以是 35-46 字节。 这两者之间的串口使用 CreateFile Windows 函数建立并配置为同步,如下所示:
波特率:38400
字节大小:8
奇偶校验:无
停止位:1
我试图在 Arduino IDE 和 hterm 上查看传入的数据。 数据应该是正确的。 但是,我的应用程序收到“不规则”数据。 有时, ReadFile 函数从字符串的中间读取 + 连接的下一个字符串:
12.345*\\n\\r$67.890,67.890,67.890,67.890*
因此,我会问是否可以将 Windows 串行设置为丢弃在“$”符号到达之前进入输入缓冲区的任何字符?
串口通信基本上是基于字符的通信,而不是像TCP/IP这样的基于数据包的定界通信。
接收方并不总是能够读取发送方一次写入的数据,并且有可能一次读取可以同时接收多个写入的数据。
你必须明白这一点,把所有接收到的数据都当作有效数据,对其进行分析,并针对每个分隔符单元进行切割。
未到达定界单元的数据必须与稍后接收的数据进行级联,并且必须在分析前接收到足够长度的数据。
如果丢弃碎片数据,将无法进行正确的通信。
请仅丢弃分析结果中看似噪声或无效数据的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.