我有一个 Java 程序,它不断地在串行端口上侦听某种格式的消息。当发送方应用程序不发送消息时,它会以以下格式发送心跳消息:
- 字节 1:1
- 字节 2:0xFE
- 字节 3:0xED
- 字节 4-255: 0
如果接收方应用程序在发送方之前启动,则一切正常,但是,如果发送方一直在发送心跳,则几乎可以肯定接收方在启动时将在心跳消息中间开始监听(这是一个问题因为我读取了 255 个字节的块,因为每条消息都是 Reed-Solomon 编码的)。我写了一个同步函数,它是一个简单的状态机。它一次读取 1 个字节,条件如下:
如果我只是读到一个 1: 切换到 NEW_MESSAGE 状态。
如果我只是读取 0xFE:切换到 POTENTIAL_HEARTBEAT 状态。
如果我只是读到一个 0xED: 切换到 HEARTBEAT 状态
进行了相关检查以确保这些状态不会乱序到达,一旦我达到 HEARTBEAT 状态,我会读取剩余的 252 个 0 并假设接收器已同步。在到目前为止的测试中,尽管发送了正确的字节以有效地触发同步,但该同步器仍无法正常工作。我的问题是:有没有更好的方法来同步串行通信,因为我真的一点也不喜欢我的方法。