Как лучше сделать реализацию на языки си протокола?

Вопрос к Гуру. Меня интересуют методы реализации какие наиболее оптимальные и простые в понимании. С помощью которых можно допустить меньше ошибок и наиболее устойчивые.

  пошаговое объяснение работы протокола zmodem. Понял не все, надеюсь пойму.
  Прием файла --->
 * 1.  ---> Получаю команду RZ+CR в числовом виде в .hex формате 72 7A 0D
 * 2.  ---> Получаю запрос "Так называемый ZRQINIT" в .hex формате 2A 2A 18 42 30 30 30 30 30 30 30 30 30 30 30 30 30 30 8D 8A 11 раскладывается по HEX HEADER "* * ZDLE B TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2 CR LF XON" причем 8D 8A в xor операции
 * 3.  <--- Я должен ответить на запрос "ZRQINIT" отвечаю в HEX формате (взял за основу HEX формат) "2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65 30 0D 8A" причем самое интересное может прийти запрос а может и не прийти запрос нужно обрабатывать два события
 * 4.  ---> Получаю запрос "ZFILE" с заголовком названия файла сначала получаю "2A 18 41 04 00 00 00 01 99 27" После сразу приходит "68 65 6C 6C 6F 77 6F 72 6C 64 2E 74 78 74 00 31 37 20 31 33 37 33 36 37 33 36 32 35 34 20 31 30 30 36 34 34 00 18 6B 18 51 4A"
 * 5.  <--- После сразу отвечаю ZPAD отправляю посылку "2A 2A 18 42 30 39 30 30 30 30 30 30 30 30 61 38 37 63 0D 8A"
 * 6.  ---> Получаю данные файл в .bin формате "68 65 6C 6C 6F 20 77 6F 72 6C 64 21 21 21 21 21 21 18 68 B3 94" в конце контрольная сумма Crc16
 * 7.  ---> В силу короткого файла получаю конец файла "ZEOF" "2A 2A 18 42 30 62 31 31 30 30 30 30 30 30 38 31 65 63 8D 8A 11"
 * 8.  <--- Отвечаю в .bin формате "2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65 30 0D 8A"
 * 9.  ---> Принимаю пакет ZFIN "2A 2A 18 42 30 38 30 30 30 30 30 30 32 33 62 65 30 0D 8A"
 * 10. <--- Отвечаю ZFIN "2A 2A 18 42 30 38 30 30 30 30 30 30 32 33 62 65 30 0D 8A"
 * 11. ---> Получаю два символа "OO"
 *
 * Проблемы:
 * 1. Использую виртуальный ком порт на stm32. По виртуальному ком порту может прийти от 1 байта до 64 байт. Пример может сразу прийти RZ+CR или сначала R потом Z  потом CR
 * 2. Обрабатываю входную информацию в векторе прерывания USB
 * 3. Высылаю данные ответа через USB
 * Есть идеи как лучше это реализовать на си ? 

Ответы (0 шт):