Nepochopitelné chování
Napsal: 15 zář 2023, 16:39
Zdravím, včera jsem zažil docela nepochopitelnou věc. Koncept programu je takový, že z loopu je neustále volána funkce, která se ale nevykonává celá, vykonávají se pouze některé její části v závislosti na nastavení globálních proměnných. Jelikož spolupracuji s člověkem neprogramátorem, je složité nepoužívat blokující příkazy jako např while. Na zastavení programu používám tlačítko na externí interupt, které nastaví flag isStoped = true, čímž dojde k přerušení cyklu a vyskočení z funkce a k jejímu opětovnému zavolání nedojde do té doby než isStoped = false. No a teď to nepochopitelné ...
může mi někdo nějak rozumně vysvětlit co se děje ? 
Kód: Vybrat vše
// tohle nefunguje, interupt se provede program zustane ve while
void funkce () {
while(1){if(isStoped) break;
//kod
}if(isStoped) return;
}
// tohle funguje naprosto perfektně
void funkce () {
Serial.println("a");
while(1){if(isStoped) break;
//kod
}if(isStoped) return;
}
// tohle taky funguje naprosto perfektně
void funkce () {
motorRotator.moveTo(motorRotator.currentPosition());
while(1){if(isStoped) break;
//kod
}if(isStoped) return;
}
// a když si chci vypsat isStoped, tak taky funguje naprosto perfektně
void funkce () {
while(1){
Serial.println(isStoped);
if(isStoped) break;
//kod
}if(isStoped) return;
}
// ale když to dám vypsat takhle, tak to nefunguje ... interupt se provede, ale program zůstane v tom while
void funkce () {
while(1){
if(isStoped){
Serial.println(isStoped);
break;
}
//kod
}if(isStoped) return;
}
