Leere while-Schleife

Gast #3665826
Lesenswert?

Hallo,

ich hatte jetzt schon öfter das Problem, dass eine leere while-Schleife 
sich aufhängt.

Die Variable x wird in einer ISR irgendwann von 0 auf 1 gestzt. Solange 
möchte ich nichts tun. So funktioniert es auch:
1
while(!x)
2
{
3
   NutzloseFunktion();
4
}

So aber nicht:
1
while(!x)
2
{
3
   continue;
4
}

Und so auch nicht:
1
while(!x);

Was mache ich falsch?

Ich Programmiere einen dsPIC in MPLABX mit dem C30 Compiler.
Gast #3665870
Lesenswert?

Vielen Dank! Ihr habt natürlich Recht. Volatile löst das Problem.

Erstaunt bin ich nur noch, dass dann die erste Variante funktioniert. 
Wenn ich also in einer anderen Funktion bin und nicht direkt in der 
Schleife, in der x abgefragt wird, kann meine ISR wieder auf x 
zugreifen. Vermutlich denkt der Compiler nicht soweit, dass auch mit der 
Funktion in der Schleife sich x im "eigentlichen" Programm nicht ändert?

Was spricht eigentlich dagegen einfach alle Variablen als volatile zu 
deklarieren um solche Fehler auszuschließen?
Gast #3665873
Lesenswert?

Bernd schrieb:
> Vermutlich denkt der Compiler nicht soweit, dass auch mit der
> Funktion in der Schleife sich x im "eigentlichen" Programm nicht ändert?

er wird einfach kein Register für X frei haben, damit muss er es aus dem 
RAM laden und dort steht ja der richtige wert drin.
#3665874
Lesenswert?

Bernd schrieb:

> Was spricht eigentlich dagegen einfach alle Variablen als volatile zu
> deklarieren um solche Fehler auszuschließen?

Damit zwingt man den Compiler bei jeder Abfrage einer Variablen deren 
Wert aus dem Speicher zu lesen. Das geht nicht umsonst. Und die 
wenigsten Variablen müssen volatile sein. Lerne lieber was volatile 
genau macht und wann und warum man es braucht. Statt deine Unwissenheit 
zu pflegen und die Holzhammermethode zu bevorzugen.

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