AvrGCC erzeugt RJMP PC-0x0000

Gast #709097
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren