Генератор на perl конечного автомата на C.

Идея написать статью возникла, когда наткнулся на easyelectronics.ru/avr-uchebnyj-kurs-konechnyj-avtomat.html

В данной статье рассматривается принцип работы сгенерированного кода, сам генератор написан на perl и в нём особо интересного ничего нет, берите, пользуйтесь, модифицируйте под свои нужды :)

По сути, предыстория написания программы-генератора: некоторое время назад я делал несколько мелких программ для нового проекта, все они различались реакциями на события. День тупого полумеханического труда по написанию почти одного и того же и к вечеру у меня сдали нервы. Попробовал поискать какой-нибудь готовый генератор кода для конечного автомата (КА) или хотя бы таблиц из некого формализованного описания, ведь по виду кажется просто — есть граф, генерируй-нехочу. Главными критериями были простота и чтоб в результате был код на чистом C, без всякиих плюсплюсов — мне же для микроконтроллера! Но тут меня ждал облом. Либо не просто, либо не C, либо вообще монструозно. В общем, ничего подходящего, не нашёл. К обеду следующего дня у меня был простенький наколенный генератор на perl, как в мультике — лучше день потерять зато потом за пять минут долететь :). Потом уже, когда его стали использовать коллеги, дописал некоторые вещи по их замечаниям. В конце концов получилось нечто, что уже не раз пригождалось узкому кругу людей, и что я и хочу представить на суд общественности, может кому-то ещё поможет.

Практически каждый программист микроконтроллеров (да, впрочем, и не только), делая свой проект, сталкивается с необходимостью обработки событий, изменяющих состояние программы/устройства. Обычно для этого используется тот или иной вариант реализации КА. При этом бывает так, что пишет человек КА, только об этом не знает :)


Читать дальше