【问题标题】:Windows Serial Communication, Handle Parity bitWindows 串行通信,处理奇偶校验位
【发布时间】: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


【解决方案1】:

documentation 似乎很清楚如何处理(或不处理)奇偶校验错误:“由于操作系统决定是否引发此事件,因此可能不会报告所有奇偶校验错误”

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 2012-07-02
    • 2015-06-29
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多