Ich bin gerade noch über einen anderen Fehler gestolpert: #define __AVR_ATmega644__
Makros dieser Art bitte niemals selbst definieren. Das passiert intern durch Compiler/avr-libc, wenn du das machst können alle möglichen und unmöglichen Dinge kaputt gehen.
Evtl. kommt das Problem auch von daher.
Nachtrag: Ich habe das ganze im Schnelldurchgang getestet. Bei mir (Ubuntu 12.04, avr-gcc 4.5.3) zeigt sich unabhängig vom AVR bei beiden Blöcken das jeweils erwartete Verhalten. Die leere Schleife wird wegoptimiert, das Delay findet sich im Assembler-Listing. Auf eine Simulation habe ich aufgrund der Eindeutigkeit verzichtet.
mfG
Markus
Ach ja: <avr/io.h>, nicht "avr/io.h" (oberer Codeblock). Alles in spitzen Klammern sucht der Compiler bei den angegebenen Suchpfaden selbst, alles in Anführungszeichen ist eigentlich relativ zum Pfad an dem sich die Quelltextdatei befindet.
Lesezeichen