LINUX.ORG.RU

Конечные автоматы для микроконтроллера

 конечный автомат,


1

1

Почитал по сабжу, поразмыслил над этим, и подумал, что должно быть весьма годный прием для программирования микроконтроллера. Накидайте пожалуйста реальных примеров, хотелось бы в живую поглядеть, как там всё устроено.

★★★★

У меня на сосфорже или гитхабе можешь глянуть ircontroller, директория with_opencm3. Я там кое-что как раз на автоматах сделал (работа с внешним АЦП, управление шаговиками и т.п.).

Eddy_Em ☆☆☆☆☆
()

Смотря что имеешь в виду под «годным приемом». Если FSM просто как инструмент (для реализации какого-то протокола взаимодействия) — однозначно используется везде, где применимо (с разной степенью уродства, ггг). Если маньячество в стиле «да нафиг нам RTOS, давайте забубеним один большой автомат и им будем всем рулить» — ну, читал одну статейку, как-то не загорелся желанием выкидывать RTOS на помойку истории. В Питере ещё Шалыто из СпбГУ эту парадигму продвигает, книжки пишет...

alegz ★★★★★
()

Не знаю, на сколько тебе это актуально, но само программирование автоматов очень удобно делать на Prolog:

:- initialization(main).
main :- nl, run('A', [b, x]), nl, halt.

% transition(From, To, [Symbols...])
transition('A', 'B', [b]).
transition('A', 'C', [c]).
transition('B', 'C', [x, y]).

run(State, []) :-
    write('current state: '), write(State), nl,
    write('done'), nl.

run(State, Input) :-
    write('current state: '), write(State), nl,
    Input = [Symbol|Rest],
    transition(State, NextState, Symbols),
    member(Symbol, Symbols),
    run(NextState, Rest).

Запустить этот пример в online можно тут: http://www.tutorialspoint.com/execute_prolog_online.php

Проблема в том, что трудно будет найти интерпретатор Пролога, который можно засунуть в микроконтроллер. Можно почитать обсуждение по теме: http://comments.gmane.org/gmane.comp.ai.prolog.swi/21076 С другой стороны, на Прологе также очень легко написать что-то типа языка для определения автоматов и генерировать по нему С-шный код, но скорее всего, это будет overkill.

runtime ★★★★
()

Автоматы много где полезны. Особенно полезны при программировании протоколов обмена. Еще парсеры всякие. Вообще, любые вещи, которые укладываются в формализацию автоматов. У меня в торговом автомате автоматы использованы во все поля: и в реализации протоколов, и в алгоритме работы контроллера.

Zubok ★★★★★
()

Ну и как бы это не прием, а способ формализации задачи. Вспомнил старый свой комментарий как раз по этой теме (сейчас я не такой пафосный, как тогда, лол): Утилитарность против академичности (комментарий)

Вот примеры: https://www.google.com/search?tbm=isch&q=(protocol OR microcontroller) "s... :)

И еще есть разные штуки для описания логики. Например, ladder logic - широчайшее применение в программировании PLC. Я промышленную линию полностью переделывал людям, там это сплошь и рядом было. Я писал под промышленные контроллеры Mitsubishi и Siemens.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Не знал, что оно так называется)

WRG ★★★★
() автор топика
Ответ на: комментарий от Zubok

Это немного не то что я имел в виду, но все равно спасибо. Я имел в виду именно пример реализации на C, чтоб меня носом ткнули, а то с ходу не гуглилось, но я уже нашел один такой на гитхабе. Там автоматик правда маленький, и весь код в одном файле. Думал глянуть как автоматы между собой данными обмениваться должны.

WRG ★★★★
() автор топика
Ответ на: комментарий от WRG

Думал глянуть как автоматы между собой данными обмениваться должны.

Через переменные состояния. А через что еще? Любую реализацию протокола через автоматы, где атоматы независимо для приемника и передатчика. Они работают по своим графам, но взаимозависимы.

Zubok ★★★★★
()
Ответ на: комментарий от WRG

Они не «обмениваются данными», они себя переводят из одного состояния в другое в зависимости от условий. Так что сосредоточься на функции, которая при вызове проверяет условия и изменяет переменную состояния, вот она-то и читает все необходимые данные, чтобы автоматом управлять. Подумай, кем она будет вызываться и откуда (прерываниями, таймером, в суперцикле и т.д.)

prischeyadro ★★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.