Micha schrieb:
> Wenn ich den Code im Simulator debugge, springt
> er immer von State 0 in State 5. Ich hab glaub ich schon ne
> Denkblockade. Seht ihr auf Anhieb, wieso nicht erst in State1 gesprungen
> wird?
Der Optimizer des Compilers ist schlauer als du denkst, er erkennt, dass
der Code für State 1 und State 5 komplett identisch ist, und fasst die
beiden Fälle im generierten Code zusammen. Die Debuginfos/der Debugger
können das nicht darstellen, sondern zeigen dir bei der Ausführung dann
einen der beiden Fälle im C-Code an.
Andreas
PS: Die Sache mit volatile gilt natürlich trotzdem, so wie der Compiler
arbeitet wird deine Hauptschleife von der Änderung von actState im
Interrupt nie irgendwas mitbekommen. Die Variable wird lokal in einem
Register gehalten, und nicht mehr aus dem Arbeitsspeicher geladen,
solange die Schleife läuft.
PS2: Generell gilt, dass beim Singlesteppen von stark optimiertem Code
die dollsten Dinge passieren können, beispielsweise dass Code scheinbar
übersprungen wird, oder die Ausführung sich schonmal rückwärts zu
bewegen scheint.