2015-05-15 10 views
12

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.

+1

Strange razie pytań również :) –

+0

@StraightLine: sporadycznie;) –

+8

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

Odpowiedz

2

Jak o patrząc na wyjściu asemblerze od kompilatora?

g++ -std=c++0x x.cpp -S 

wyjścia:

.L2: 
     jmp  .L2 

i

clang++-3.5 -S -std=c++11 x.cpp 

wyjścia:

.LBB0_1:        # =>This Inner Loop Header: Depth=1 
     jmp  .LBB0_1 
+1

Patrząc na wygenerowany montaż na jednym uruchomieniu kompilacji, tak naprawdę nie dostarczysz potrzebnych informacji. Cóż, chyba że wyślesz tylko ten dokładny wynikowy plik binarny. :) –

+0

Niektórzy mogą założyć, że "wbudowane oprogramowanie" oznacza dokładny obraz binarny. –

+1

Wystarczająco dobre. I, szczerze mówiąc, prawdopodobnie odpowiednia odpowiedź. :) –

Powiązane problemy