Передавать данные в двоичной форме я бы не рисковал. При таких объёмах данных лучше использовать классический ANSI, в этом случае можно поставить однозначные метки заголовка и конца строки, которые никак не совпадут с телом строки.
Если же вы делаете бинарную передачу, то надо писать полноценный арбитраж со стороны МК, а именно:
1. CRC, куда ж без него.
2. Проверку диапазонов значений начала строки и других ключевых элементов, диапазон значений которых известен.
3. Сброс счётчика прерывания в случае повреждения данных и поиск начала нового сообщения по ключевым факторам. Например, можно начать сообщение известной последовательностью. Старый как мир протокол A5, сообщение начинается 0xA5, кончается 0x5A, их XOR даёт FF, AND = 0. Две логические операции заменяют КС и CRC во многих случаях.
Ну или могу дать табличный метод расчёта CRC, две таблицы во флеше, считает CRC за 5+длина_строки циклов.
|