Gast
#177630
Hallo,
leider bin ich immer noch arg am Anfang mit C. Drum schreib ich einfach
die simpelsten Programme und simuliere im Studio 4.10 hin und her. Nun
ist folgendes passiert:
void delay (int a) {
for (int b=0; b<a; b++) {
};
}
und
delay (2);
wird übersetzt zu
for (int b=0; b<a; b++) {
CP R1,R24 Compare
CPC R1,R25 Compare with carry
BRGE PC+0x03 Branch if greater or equal, signed
for (int b=0; b<a; b++) {
SBIW R24,0x01 Subtract immediate from word
BRNE PC-0x01 Branch if not equal
RET Subroutine return
und
delay (2);
LDI R24,0x02 Load immediate
LDI R25,0x00 Load immediate
RCALL PC-0x0014 Relative call subroutine
Wenn ich mir im Watch-Fenster die Variablen a und b anschaue, sind
BEIDE Werte im ersten Durchlauf 2, im zweiten Durchlauf BEIDE 1 und
dann wird mit RET wieder zurückgekehrt. Wie auch im Disassembler zu
sehen, löst er die Zählung mit Minus statt mit Plus. Im Prinzip macht
das Programm ja, was es soll (nämlich 2 mal nix und dann zurück), aber
wenn ich später mal "richtig" debuggen will und die Variablen immer
andere werte haben als intuitiv erwartet (wer weiß, was für
Optimierungen da noch so gehen), wird´s nicht so hilfreich sein, den
aktuellen Wert einer Variablen anzuschauen.
Oder hab ich was falsch im Compiler eingestellt, was ich gaaanz schnell
wieder ändern sollte?
Danke und Gruß
Lutz