У меня есть программа на Java, которая постоянно прослушивает сообщения определенного формата через последовательный порт.Когда приложение отправителя не отправляет сообщения, оно отправляет сообщения пульса в следующем формате:
- байт 1: 1
- байт 2: 0xFE
- байт 3:0xED
- байтов 4-255: 0
Если приложение-получатель запускается перед отправителем, все работает правильно, однако, если отправитель сбрасывал тактовые импульсы, это почти навернякачто приемник при запуске начнет слушать в середине сообщения сердцебиения (что является проблемой, потому что я читаю порциями по 255 байт, поскольку каждое сообщение кодируется кодом Рида-Соломона).Я написал функцию синхронизации, это простой конечный автомат.Он читает 1 байт за раз со следующими условиями:
Если я только что прочитал 1: переключиться в состояние NEW_MESSAGE.
ЕслиЯ только что прочитал 0xFE: переключиться в состояние POTENTIAL_HEARTBEAT.
Если я только что прочитал 0xED: переключиться в состояние HEARTBEAT
Соответствующие проверкинаходятся на месте, чтобы гарантировать, что эти состояния не могут быть получены не по порядку, и как только я достиг состояния HEARTBEAT, я прочитал оставшиеся 252 0 и предположил, что приемник был синхронизирован.До сих пор при тестировании этот синхронизатор работал некорректно, несмотря на отправку правильных байтов для эффективной синхронизации.У меня такой вопрос: есть ли лучший способ синхронизации последовательной связи, потому что мне действительно не нравится мой метод.