Moin,
Ich benutze den gcc version 4.3.4 (GCC) unter Unix.
Mir ist folgendes aufgefallen:
Sagen wir mal, wir haben einen Source-Code wie z.B.
1 | #include <avr/io.h>
|
2 | #include "main.h"
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | DDRD = 0xFF;
|
7 | PORTD = 0xFF;
|
8 | return 0;
|
9 | }
|
und kompilieren diesen mit:
1 | [...]
|
2 | avr-gcc -c -mmcu=atmega8 -I. -gstabs -O2 -Wall -Wstrict-prototypes -std=gnu99 -Wa,-adhlns=main.lst -DF_CPU=16000000UL -Wl,--relax,--gc-sections main.c -o main.o
|
3 | avr-gcc -mmcu=atmega8 -I. -gstabs -O2 -Wall -Wstrict-prototypes -std=gnu99 -Wa,-adhlns=main.o -DF_CPU=16000000UL -Wl,--relax,--gc-sections main.o --output main.elf -lm
|
der Assembler-Dump (avr-objdump -d) zeigt jedoch in der main section:
1 | [...]
|
2 | 0000005e <main>:
|
3 | 5e: 8f ef ldi r24, 0xFF ; 255
|
4 | 60: 81 bb out 0x11, r24 ; 17
|
5 | 62: 82 bb out 0x12, r24 ; 18
|
6 | 64: 80 e0 ldi r24, 0x00 ; 0
|
7 | 66: 90 e0 ldi r25, 0x00 ; 0
|
8 | 68: 08 95 ret
|
Ich frage mich hierbei wofür ein ldi r25 (in 0x66) ausgeführt wird, wenn
r25 hierbei gar nicht gebraucht wurde (auch nicht in den anderen
sections).
Hab ich nicht aufgepasst, oder laeuft da etwas schief?
Gruß