while schleife nich wegoptimieren!

Gast #694053
Lesenswert?

das grundgerüst eines avr mikrocntroller programms sieht ja bekanntlich 
folgendermassen aus:

int main(void){
while(1);
return 0;
}

richtig, oder? jetzt habe ich aber wahrscheinlich das problem, dass die 
while(1); schleife vom compiler wegoptimiert wird und das programm dann 
nach return 0; neustartet, vermutich auf jeden fall! ich will aber nicht 
dass das programm immer neustartet sondern dass es in der while schleife 
verweilt! wie kann ich dem compiler beibringen, dass der diese schleife 
nicht wegoptimieren soll?
#694064
Lesenswert?

Daumenregel für Compileroptimierung: Kein Compiler wird, jedenfalls 
nicht vorsätzlich, etwas an den für ihn sichtbaren Wirkungen eines 
Programms ändern. Aus seiner Sicht kommt hinten immer das raus, was das 
Programm vorschreibt. Hier steht eine Totschleife und genau das kommt 
dabei raus. Kann indes sein, dass er das return danach als überflüssig 
ankreidet.

Leere Zählschleifen haben keine für ihn sichtbare Auswirkung - sie 
ändern nichts an irgendwelchen Daten, nur die Zählvariable ändert sich 
auf einen bekannten Endwert. Also fliegt sie raus und wird durch eine 
einfache Zuweisung wie i=100 ersetzt. Und wird i danach nicht mehr 
verwendet, fliegt auch die raus.

Allerdings kann er keine Änderungen erraten, die er nicht sieht, weil 
sie in Interrupts oder in der Hardware stattfinden. Da liegt der 
eigentlich Knackpunkt (=> volatile).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren