Ich hätte da einen ganz heißen Tipp: Die Optimierung im Compiler hat zugeschlagen. Die Schleife im oberen Programm tut effektiv nichts. Nach ihrer Ausführung ist der Speicherinhalt und Zustand des µCs unverändert. Damit kann der Compiler ganz rausnehmen - Und das tut er bei eingeschalteter Codeoptimierung auch. Ich schätze, dass du den unteren Code mit Optimierung übersetzt hast, den oberen aber ohne.
Mit solchen Tricks legst du dich effektiv selbst hinein. Es gibt für solche "kritischen" Aufgaben nicht ohne Grund fertige Lösungen in der avr-libc.
mfG
Markus
Lesezeichen