LINUX.ORG.RU

Определение начала/конца пакета


0

1

Устройство на микроконтроллере и комп связаны по USB, но со стороны микроконтроллера все предельно просто - 8-битный порт для данных, 2 бита для контроля заполнения FIFO, и 2 бита для записи/чтения порта.

Возможно горячее подключение/отключение устройства, и поэтому простой протокол типа len-cmd-data-crc не может определить где начинается пакет, и где он кончается. Как проще всего организовать синхронизацию в таких случаях? Микроконтроллер 8-битный, очень мало памяти, сам по себе медленный, посему варианты перепаковывать байты по 7 бит не приветствуются. Таймауты тоже не вариант, тк данные буферизируются, да и таймеры заняты другим.

Нужно что-то быстрое и не требовательное к ресурсам. Пока рассматриваю вариант неких magic чисел в начале/конце пакета. Выслушаю ваши предложения.



Последнее исправление: CFA (всего исправлений: 2)

Во всех потоковых штуках используется какая-то последовательность которая никогда не может быть в исходных данных (вспомним про +++ в модемах). Тогда если такое в данных появилось - надо ескейпить (чем и занимается ppp)

mmarkk
()

Магия не канает, потому что злоумышленник пренепременно в данных пакета попробует отправить другой (вложенный) пакет. и будет вздрыжне эффекте.

mmarkk
()
Ответ на: комментарий от mmarkk

Злоумышленник в данном случае отсутствует. А вероятность того, что в результате сбоя вложенные данные будут восприняты как корректный пакет (а для этого нужна правильная длинна и контрольная сумма) довольно низкая. Хотя если все же такое произойдет, последствия хоть и не смертельные, но неприятные.

Хотя вариант с эскейп символом, пожалуй, что привлекательней.

CFA
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.