Hans schrieb:
> ich habe mal eine ganz allgemaine Frage:
>
> Es heißt, man sollte die Optimierung im AVRStudio ausschalten, da sonst
> für die Funktion des Codes benötigte Teile "wegoptimiert" werden.
unglücklich ausgedrückt aber es steckt ein Körnchen Wahrheit drinnen.
Wenn der Optimizer eingeschaltet ist, dann baut dir der Compiler den
Code um. Manchmal ist das ganz schön heftig, so dass im Debugger die
Schrittanzeige wild umherspringt, weil der tatsächlich laufende Code mit
dem was du geschrieben hast formal nur noch sehr wenig zu tun hat.
> Für eine funktionierende Delay-Funktion soll die Optimierung aber
> eingeschaltet werden.
Nicht 'soll'.
Sondern 'muss'!
Dein Problem ist jetzt, dass du nicht weißt, was du tun sollst:
Optimierer ein oder aus?
Nun: Das kommt jetzt drauf an, worauf du in der Simulation aus bist.
Willst du die korrekte Funktion kontrollieren, ob Berechnungen stimmen,
etc. dann lass den Optimierer ausgeschaltet. Die Zeiten, die dir beim
_delay_ms rauskommen werden, werden nicht stimmen. Unter Umständen ist
auch das Programm wesentlich größer als es nurmal sein wird. Das soll
dich aber insofern nicht berühren, da du ja nur darauf aus bist, das
Programm zu verfolgen, was es macht, was es berechnet etc. Das Timing
ist an dieser Stelle nicht so wichtig, vor allen Dingen weil es sowieso
nicht stimmen wird.
Bist du aber darauf aus, dass du im Simulator Timingfragen klärst oder
Fehler suchst bei denen Variablen seltsam nicht reagieren oder ungewollt
Werte verändern, dann musst du den Optimizer einschalten. Das Programm
muss im Simulator exakt so laufen, wie es auch auf dem realen µC laufen
wird. Nur dann stimmt der Programmlauf im Simulator in allen Details mit
einem Programmlauf auf dem realen µC überein. Und das ist wichtig um
derartige Fragen zu klären. Du darfst dich dann natürlich nicht daran
stören, dass im Simulator verschiedene Dinge scheinbar anders passieren
als du es nieder geschrieben hast. Dein Augenmerk liegt dann nicht mehr
auf einer exakten 1:1 Entsprechung zu deinem C-Code, sondern darauf ob
der Code aus einer höheren Warte gesehen genau das tut was du willst.