Forum: Compiler & IDEs AvrGCC erzeugt RJMP PC-0x0000


von asdbla (Gast)


Lesenswert?

Hallo,

ich verzweifel gerade ein wenig, weil der AVRGCC sehr komischen Code 
erzeugt.

Ich habe folgende whileschleife:

while(os_getMapEntry(ptr) == 0x0D){;}

Dies erzeugt folgenden Code:
1208:       while(os_getMapEntry(ptr) == 0x0D);
+00000786:   308D        CPI     R24,0x0D         Compare with immediate
+00000787:   F409        BRNE    PC+0x02          Branch if not equal
+00000788:   CFFF        RJMP    PC-0x0000        Relative jump
+00000789:   CFFF        RJMP    PC-0x0000        Relative jump
+0000078A:   9508        RET                      Subroutine return

In R24 steht der Wert der Rückgabe von os_getMapAntry(ptr), das hat er 
vorher schon erfolgreich ausgeführt.
Aber unabhängig von der Erfüllung der Bedingung im while, endet er immer 
in einer Endlosschleife.
Dieses Phänomen habe ich noch bei ein paar anderen IFs und whiles. Hat 
jemand eine Erklärung warum der avrgcc mit -O1 dies macht?

Schönen Abend

von Andreas K. (a-k)


Lesenswert?

Wie sieht der Rest des Quellcodes aus? Von der Funktion in der diese 
Zeile drinsteht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hast du alle Warnungen eingeschaltet?  Vielleicht erzählt er dir ja
dabei was von wegen "Comparison is always true due to ...".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.