Falk Brunner schrieb:
> @ Christian H. (netzwanze) Benutzerseite
>
>>Alle Variablen, die in einer Interrupt-Routine verändert werden, müssen
>>volatile sein.
>
> Nicht ganz.
Ok, nicht alle, sondern nur die, welche im Interrupt und in der
Hauptschleife verwendet werden.
>> Ansonsten merkt der Compiler nicht, dass sich die
>>Variable verändert und optimiert sie weg.
>
> Kaum. Er optimiert aber ggf. den ZUGRIFF.
Stimmt, mal wieder zu voreilig geschrieben. Ich meinte auch den Zugriff.
Hier ein Beispiel, was ich meinte (hoffe mal, dass es so besser ist):
main:
1 | variable = 1;
|
2 | while (1) {
|
3 | if (variable == 2) {
|
4 | mach_licht_aus();
|
5 | }
|
6 | }
|
wird optimiert zu:
da sich innerhalb der Schleife ja scheinbar nichts mehr verändert. Der
IF-Vergleich wird also nie zutreffen (so jedenfalls die Meinung des
Compilers).