Я встроил переключатель состояния в моем программном обеспечении C ++ на микроконтроллере STM32. В основном это работает так:
appRun(){
switch(theState){
case STATE_1:
function1(&theState);
break;
case STATE_2:
function2(&theState);
break;
}
}
Каждая функция может изменять состояние, если достигается определенное условие. Это работает отлично, пока 27-й случай не будет достигнут. Когда поражен 27-й корпус, микроконтроллер реагирует странно. При входе в режим STOP2 (когда процессор остановлен, но Ram сохраняется) контроллер не выходит из режима STOP2. Когда режим STOP2 закомментирован и заменен на
while(buttonNotPressed());
, проблема не возникает. Важным открытием стало то, что не имеет значения, какой код находится внутри корпуса 27-го коммутатора. Если оставить пустым, много кода или только одну строку, он всегда действует одинаково.
Это не проблема Fla sh Размер хранилища или использование ОЗУ, поскольку только 50% Fla sh и 10% оперативной памяти используется. Устройство debbuger не показывает никаких серьезных сбоев или других сообщений об ошибках во время работы.