ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
13 мая
1517661 Топик полностью
Бoмж (Вчера, 15:09, просмотров: 107) ответил Скрипач на Мой вариант - намного лучше. Собственно состояния - прототридсы. goto это переход на мини блоки инициализации каждого из состояний.
Мой вариант самый лучший 😁😁😁 
/* Период 1 ms */
void PeriodicTimer_OnCounterRestart(LDD_TUserData *UserDataPtr)
{
/* Здесь вызываем ADC */
ADCMeasureComplete = true;
}


int main(void)
{
InitADC();
InitWDG();

while (1)
{
if (ADCMeasureComplete) // 1ms
{
ADCMeasureComplete = false;
Error = WDog1_Clear(MyWDog1Ptr); // Clear watchdog timer

// SystemStateMachine();
// ValvesStateMachin();
// CanBusStateMachine();
foo();
}
}

}


void foo()
{
static int state = 0;
static int TimeMeasure = 0;

switch(state)
{
case NAME0:
if(Button1()){state = NAME1; break;}
if(Button2()){state = NAME2; break;}
TimeMeasure = 0;
state = WAIT1;
break;

case NAME1:
if(Button1()){state = NAME2;}
if(Button2()){state = NAME3;}
break;

case NAME2:
if(Button1()){state = NAME1;}
if(Button2()){state = NAME3;}
break;

case NAME3:
if(Button1()){state = NAME0; break;}
if(Button2()){state = NAME1; break;}
TimeMeasure = 0;
state = WAIT2;
break;

case WAIT1:
if(TimeMeasure >= 100){state = NAME3;}
break;

case WAIT2:
if(TimeMeasure >= 500){state = NAME2;}
break;

default:
state = NAME0;
break;
}

TimeMeasure++;
}
memento mori