An infinite loop with an empty body has undefined behaviour in C++11. Nie wiem, czy robi to również w C, więc powiedzmy, że piszę wbudowane oprogramowanie w C++ 11 (wiem, mało prawdopodobne, ale znoś się ze mną).Jakie jest moje najlepsze podejście do określania zachowania kompilatora dla pustych pętli nieskończonych?
Jeśli moja main
były po prostu:
while (true) {}
i reszta funkcjonalności urządzenia były obsługiwane przez przerwań, co podejść mogę podjąć, aby dowiedzieć się, czy moja realizacja sprawia, że ta pętla bezpieczne i sensowne? Pamiętając, że według standardu implementacja jest wolna, aby robić w tym przypadku wszystko, co jest potrzebne, łącznie z całkowitym usunięciem pętli.
Załóżmy, że nie jest jasno określone w dokumentacji wdrożenia, tak jak nigdy nie widziałem tego.
lub jest to przegrana, i mam włamać obejście?
volatile unsigned int dummy = 0;
while (true) {
// Make the loop well-defined...
dummy++;
// ...with a trivial operation that'll hardly ever even happen
sleep(42*86400);
}
uznaję, że historycznie osadzone deweloperzy nie dają wiele myśli do tego typu rzeczy, zamiast zakładając bardziej „na ziemię”, podejście „zdrowego rozsądku” ze swojego kompilatora. Ale wolę kodować zgodnie ze standardami, aby uniknąć niespodzianek w jak największym stopniu.
Strange razie pytań również :) –
@StraightLine: sporadycznie;) –
Jeśli ta wiecej niż teoretyczne pytanie, twój wbudowany procesor prawie na pewno ma instrukcję zatrzymania operacji, dopóki nie dojdzie do przerwania. To zaoszczędziłoby trochę mocy baterii (i, z tego co wiem, sprawiło, że pętla była dobrze zdefiniowana). – zneak