Hallo,

was machst du denn in der while? Du änderst eine Variable die woanders nicht mehr gebraucht wird. Für den Compiler stellt sich mit oder ohne i++ die while als überflüssig da.
Was soll denn in der while passieren?
An der Speicherverwaltung brauchst du nichts einstellen. Ich müsste jetzt auch erst einmal schauen, was für Möglichkeiten es da gibt. Mit den Defaults bin ich bisher gut gefahren.
Der WDT (Watch Dog) lässt sich bei einigen Controllern über die Fuse Bits aktivieren. Wenn man da im Programm dann nicht dran denkt, kommt es halt zum Reset, ohne das im Programm etwas zu erkennen ist. Beim AtMega 32 gibt es dieses Bit jedoch nicht.
Als bester Optimierungsgrad wird für die Avr's im allgemeinen -Os genannt.

Gruß

Jens