Ooops, stimmt, da hab ich was falsch gelesen.Zitat von ManniMammut
Jein. Wenn du zum Beispiel hinschreibst (a global)Zitat von ManniMammut
a = 0;
if (0 == a)
{
}
Dann wird ein (optimierender) Compiler das if immer ausführen, wenn er weiß, daß er a auf 0 gesetzt hat. Damit ist für ihn die Bedingung immer erfüllt! Wenn zB zwischen der Zuweisung und dem if eine IRQ auftritt, in der a verändert wird, hat der Compiler keine Möglichkeit, das zu wissen.
Daher definiert man a als volatile.
int volatile a;
und sagt damit, daß a flüchtig ist, sich also ohne Zutun des Compilers (er weiß ja nicht wann eine IRQ zuschlagen könnte oder ob die Hardware evtl a ändert) ändern kann.
Das volatile hat die Konsequenz, daß jedes mal, wenn auf a zugegriffen wird, dieses auch wirklich geschrieben oder gelesen wird. Damit wird die 0 in a gespeichert und danach a wieder gelesen.
Und alles wird gut...
Lesezeichen