Как написать конечный автомат, используя примитивы RTOS?

Как выглядит конечный автомат с использованием очереди сообщений (event/dispatch queue) с поддержкой перехода между состояниями по таймеру (отложенная обработка события), написанный с помощью примитивов RTOS?
Если писать традиционно, как для AVR, проще всего, как мне кажется, использовать две очереди: одна для сообщений с таймером, другая - сообщений без задержек; первую обрабатываем в таймере, тикающему с заданной частотой (например, 1 мс), вторую - в бесконечном цикле. Т.е. помимо самого КА надо написать две очереди, два обработчика-диспетчера. Я предполагаю, что в RTOS такие вещи должны идти из коробки вместе с планировщиком, но я только начинаю разбираться, и поэтому не понимаю как сделать КА лаконично и красиво.

Зачем нужен КА? Мне так проще формализовывать мысли и согласовывать поведение с конечным пользователями, так что этот архитектурный приём мне просто нравится. Если он совсем противоречит идеологии RTOS, как Вы её понимаете. с удовольствием выслушаю другие предложения.
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
@tugo
Погуглите по словам
"RTOS name" state machine
.
Например, "freertos state machine"
Из того, что понравилось:
https://www.sinelabore.de/doku.php/wiki/howto/rtos
https://stackoverflow.com/questions/46927097/state...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AlexSku
Программист по автоматике
Если брать Stateflow (граф состояний) из MatLab/Simulink, то там всё идёт по таймеру. Есть переходы между состояниями как по логическому условию, так и по событию.
610b657d5d079515562280.png
То же самое заложено в ПЛК, называется сканом: опрос входов, расчёты, сработка выходов, сетевые взаимодействия.
Хотя в ПЛК можно включить и асинхронные обработки прерываний, но, насколько я знаю, это только для быстрых счётчиков, да и то, нужно представлять последствия.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы