ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
1271448 Топик полностью
Adept (28.12.2022 14:14, просмотров: 208) ответил Nikolaev_Aleksey на Поделитесь опытом, как нужно делать обработку данных от gsm (AT команды). И как это привязать к автомату состояний.
организую приём команд от BT/WiFi модулей построчно (небольшой буфер чтоб поместилась строка, заканчивающаяся CRLF и учётом таймаута приёма, а потом посимвольный парсинг с учётом того, что пробел, как правило, - разделитель). Но парсить приходится по индивидуальным правилам, в зависимости от ситуации, разные отклики на разные команды (фактически ветвление с прямым сравнением с шаблонами) 

по сути функциональный аналог оператора "case". Одиночные пакеты, - параметры-отклики на команды, к примеру запрос текущего IP-адреса, парсятся без проблем, а вот многострочный отклик с непредсказуемыми таймаутами очень геморройный (например сканирование эфира и показ обнаруженных точек доступа). В любом случае, универсальный парсер построить не получится, вероятно. Ограничивайтесь столько теми командами с которым работаете.

У меня в таких случаях парсер - прямым и тупым ветвление со сравнениями, с учётом ожидаемого отклика. Т.е. даём, к примеру AT-команду и после неё прыгаем на процедуру парсинга именно ожидаемого отклика. Т.е. на каждый отклик, по сути свой парсер с жёсткими правилами. Так получается проще и компактнее.

...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)