【发布时间】:2015-01-10 15:46:15
【问题描述】:
我在 Windows 中使用串行通信进行编码。 在这种通信中,为了让程序识别消息的开始,我必须使用奇偶校验位。
表示如果接收到的设置奇偶校验位的字节是消息的起点。
例如,如果从串口接收如下字节
([byte] 表示接收到一个字节,[byte]p 表示一个设置了奇偶校验位的字节)
串口
我必须在设置奇偶校验位的字节前丢弃 4 个字节后解析上面的消息。
在 Linux 的情况下,设置奇偶校验位表示为0XFF 0x00,因此如果我收到 1 个字节的 0xEE 奇偶校验。
记为0xFF 0x00 0xEE,这样我就可以选择起点了。
但在 Windows 中,奇偶校验位似乎由WaitCommEvent() 表示为事件EV_ERR
并通过ReadFile()单独读取数据。
我认为很难找出奇偶校验错误发生在哪里来区分消息的起点。
有什么办法可以解决这个问题,其实我是windows编程的新手,我想应该还有别的办法吧?
【问题讨论】:
-
这样的协议是由那些也有硬件卖给你的公司发明的。完全清楚您没有机会自己实施它。购买产品。
-
"[byte]p 表示设置奇偶校验位的字节" -- 您似乎试图描述一个 9 位字符。奇偶校验位将是高位。所以正确的表示应该是 p
。有关可能的解决方案,请参阅superuser.com/questions/411386/… -
如果您可以在软件中接管奇偶校验位,那么每个带有奇偶校验的 8 位 UART 都是一个不带奇偶校验的 9 位 UART,只需旋转位即可将所有内容放入正确的位再次订购。遗憾的是 M$ 多年来没有更新他们的串行端口驱动程序......你可能会在 Linux 上表现得更好......而 9 位是轻松构建控制和数据的圣杯......
标签: c++ c windows serial-port parity