gpt4 book ai didi

java - 使用 RXTX 同步 java 串口连接

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:22 24 4
gpt4 key购买 nike

我有一个 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 并假设接收器已同步。在迄今为止的测试中,尽管发送了正确的字节以有效触发同步,但该同步器尚未正常工作。我的问题是:有没有更好的方法来同步串行通信,因为我真的一点也不喜欢我的方法。

最佳答案

问题实际上只是我忘记了位排序的重要性。我正在读取的字节 channel 是小端字节序,因此 16 位整数 0xFEED 将以 0xED 0xFE 而不是 0xFE oxED 的形式出现。只需在状态检查中进行简单的切换,一切就可以正常工作。

真诚感谢所有评论。

关于java - 使用 RXTX 同步 java 串口连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com