Forum: Compiler & IDEs R1 nicht richtig initialisiert - Bug im avr-gcc?


von johannes (Gast)


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

von Walter S. (avatar)


Lesenswert?

johannes schrieb:
> Liegt der Fehler im gcc, bei der Hardware oder in meinem Kopf?

3x darfst du raten ;-)

auf Port C liegt auch JTAG, hast du das berücksichtigt?
Ansonsten wird r0/1 im Startup code auf 0 gesetzt,
deshalb "kann" dein dissassembliertes Binary eigentlich nicht so 
ausschauen, wo ist da der Startcode??

von Stefan E. (sternst)


Lesenswert?

1
avr-gcc -D__AVR_ATmega16__ -o test.obj -Os test.c
Lass das "-D__AVR_ATmega16__" weg, und benutze statt dessen 
"-mmcu=atmega16".

von johannes (Gast)


Lesenswert?

Mit -mmcu=atmega16 wird auch der Startup-Code wieder generiert und alles 
funktioniert.

Danke für die schnelle Hilfe!

Beitrag #7416136 wurde von einem Moderator gelöscht.
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.