繁体   English   中英

Windows 串行:在接收到起始字节之前丢弃在输入缓冲区中接收到的所有字节

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM