да, вызывать команды из своего приложения типа comm_update_servos()
или comm_check_busy () , comm_get_adc ().
В общем цель - абстрагироваться от вопросов протокола передачи команд и обработки результатов.
P.S. это не просто передача команд и чтение из порта, тут все сложнее.
я когда шестинога делал столкнулся с тем что когда инверсная кинеметика считается на компьютере и передаются команды управления по bluetooth то для плавности движения поток управления весьма большой, требуется аппаратный контроль потока (без него буфер накапливается и на контроллер приходят команды с задержкой 5-10 сек).
Но самое фиговое это ожидание ответа от аналоговых датчиков, там задержки существенные, если ждать ответа сразу после запроса то все остальное тупит от этих таймаутов. Пришлось делать асинхронный обмен - пишем команды отдельно, и ответы отдельно разбираем, не ожидая их.
мой мозг умер на разборе регулярных выражений потока ответов микроконтроллера ...
мне кажется что я не один уперся в необходимость асинхронного разбора вывода, собственно поэтому решил сделать все правильно.
Добавлено спустя 1 час 15 секунд:народ, кто на GCC программирует, покажите пример.
нужно парсить вывод контроллера, он идет потоком и выборка условно начинается с произвольного места.
вывод может содержать такого рода сообщения:
- Код: Выделить всё
+
.
ERR09 in P cmd
ERR09 in P cmd
F0:1.49
PinModeF0=ADC
PinModeF5=ADC
хочется парсить некий буфер char[255] buf; на предмет наличия этих сообщений и заполнения статусной переменной
struct orfa_result {
uint8_t status;
uint8_t length;
char data[255];
float adc[8];
}
Вероятно сюда нужно некую постоянно увеличивающуюся переменную добавить, с "тиком", чтобы знать что было обновление одного из значений.
буду рад хотя бы примерам аналогичного парсинга.