Еще можно состояния автомата написать как функции, а автомат будет
работать как вызов указателя на функцию. typedef void (*FPV_V)(void);
void step1(void);
void step2(void);
void step3(void);
FPV_V avtomat = step1;
void step1(void){
avtomat = step3;
}
void step2(void){
avtomat = step1;
}
void step3(void){
avtomat = step2;
}
void foo(void){
avtomat();
}
Можно сэкономить 0,43% на размере кода, но глубше залезть в стек и поиметь много дополнительного геморроя в отладке.
В современных компиляторах лучше использовать РТОС.