Конечные автоматы пишутся легко и просто. Вот кусок реального кода,
где в главном цикле вызываются пять конечных автоматов
последовательно каждую миллисекунду. Некоторые автоматы в свою
очередь, вызывают другие автоматы. Главное, чтобы нигде и ничто не
могло блокировать поток выполнения. while (1)
{
if (ADCMeasureComplete) // 1ms
{
ADCMeasureComplete = false;
Error = WDog1_Clear(MyWDog1Ptr);
if (Set.SystemeConfigured == 0xFA)
{
MediumSM();
SystemSM();
ValvesSM();
CanBusSM();
}
RS485SendReciveSM();
}
}