2013-02-26 96 views
0

avr的一个小项目,当我直接编译main.c(其他所有c都包含在main.c中)时,一切正常。avr-gcc链接错误与独立obj

avr-gcc -Wall -mmcu=atmega8 -g -O1 $1 -o $1.out 
    avr-objdump -dS $1.out>$1.asm 

与asm,我可以在这里看到所有的载体。

main.c.out:  file format elf32-avr 
    Disassembly of section .text: 
    00000000 <__vectors>: 
    0:  1d cd   rjmp .-1478   ; 0xfffffa3c <__eeprom_end+0xff7efa3c> 
    2:  37 cd   rjmp .-1426   ; 0xfffffa72 <__eeprom_end+0xff7efa72> 

当我编译每个C入OBJ(只是添加一些头文件,代码几乎相同),然后将它们链接,结果失败。当然MCU会变得疯狂。

for i in src/*.c; do j=`basename $i`; j=obj/${j%%.c}.o; avr-gcc -c $i -o $j -mmcu=atmega8 -g -O1 -Wall; done; 
    avr-ld obj/*.o -o a.out; 
    avr-objdump -dS a.out >a.asm; 

这里是在asm中的代码,而不是在这里跳转,而只是我的rom数据。

Disassembly of section .text: 
    00000000 <tm_tone>: 
      0:  00 00 e0 1d 9e 1a b5 17 62 16 ee 13 c1 11 d0 0f  ........b....... 
    00000010 <tiger>: 
      10:  31 32 33 31 31 32 33 31 33 34 35 30 33 34 35 30  1231123134503450 

有什么建议吗?谢谢。如果我在使用avr-ld时手动需要特殊的每个obj文件?

回答

0

只有在编译为obj后,才可以。链接使用avr-gcc。

avr-gcc -Wall -mmcu=atmega8 -g -O1 -o main.o src/main.c obj/usart.o obj/irda.o obj/everybody.o obj/audio.o