avr的一个小项目,当我直接编译main.c(所有其他c都包含在main.c中)时,一切正常。
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 :(得分: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