0

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 ファイルを手動で特別に作成する必要がある場合は?

4

1 に答える 1

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
于 2013-02-26T06:31:02.657 に答える