R1 nicht richtig initialisiert - Bug im avr-gcc?

Gast #4164462
Lesenswert?

Hallo zusammen,

wenn ich das folgende Programm kompiliere und auf meinen ATmega16 lade, 
würde ich erwarten, dass an keinem der C-Pins eine Spannung anliegt. 
Allerdings kann ich mit dem Messgerät 5V an allen Pins messen.
1
#include <avr/io.h>
2

3
int main() {
4
    DDRC = 0xff;
5
    PORTC = 0x00;
6
    while(1) {}
7
}

Der Code ist folgendermaßen gebaut worden:
1
avr-gcc -D__AVR_ATmega16__ -o test.obj -Os test.c
2
avr-objcopy -j .text -j .data -O ihex test.obj test.hex
Das weglassen der -Os Option produziert längeren Assemblercode, aber 
dasselbe Ergebnis.

Ich habe die produzierte Binary dann mal disassembliert, mit folgendem 
Ergebnis:
1
.text
2
main:
3
ser     r24
4
out     0x14, r24       ; 20
5
out     0x15, r1        ; 21
6

7
; Referenced from offset 0x06 by rjmp
8
Label0:
9
rjmp    Label0

Wenn ich diese Assemblercode zu
1
.text
2
main:
3
ser     r24
4
out     0x14, r24       ; 20
5
ldi     r24,  0x00
6
out     0x15, r24       ; 21
7

8
; Referenced from offset 0x06 by rjmp
9
Label0:
10
rjmp    Label0
ändere und neu assembliere, funktioniert alles wie erwartet.

Der gcc geht also davon aus, dass r1 mit 0 initialisiert ist, aber das 
ist scheinbar nicht der Fall.

Liegt der Fehler im gcc, bei der Hardware oder in meinem Kopf?

Viele Grüße

Johannes
Beitrag #7416136 wurde von einem Moderator gelöscht.

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