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?