ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
8 мая
1375008 Топик полностью
Nikolay801_ (24.11.2023 09:15, просмотров: 91) ответил IBAH на Имеет ли смысл на современных компиляторах, например под АРМ, писать конечные автоматы на switch-case? Или можно через if? Ведь переменная состояния не волитейт, можно и оптимизировать, не вычислять ее перед каждым блоком
Еще можно состояния автомата написать как функции, а автомат будет работать как вызов указателя на функцию. 
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% на размере кода, но глубше залезть в стек и поиметь много дополнительного геморроя в отладке.

В современных компиляторах лучше использовать РТОС.

Будь ты проклят, Перри-Утконос!