1

CodeBlocksを使用して Arduino プロジェクトをコンパイルしています。デフォルトのリンカー コマンドは次のとおりです。

$avr-gcc  -o bin/Release/test2.elf .objs/cores/CDC.o .objs/cores/HardwareSerial.o .objs/cores/HID.o .objs/cores/IPAddress.o .objs/cores/main.o .objs/cores/new.o .objs/cores/Print.o .objs/cores/Stream.o .objs/cores/Tone.o .objs/cores/USBCore.o .objs/cores/WInterrupts.o .objs/cores/wiring.o .objs/cores/wiring_analog.o .objs/cores/wiring_digital.o .objs/cores/wiring_pulse.o .objs/cores/wiring_shift.o .objs/cores/WMath.o .objs/cores/WString.o .objs/libraries/libraries.o .objs/test2.o   -Wl,--gc-sections -Os -mmcu=attiny84  -lc -lm

Arduino IDE は別のアプローチを使用します。avr-arを使用して単一のライブラリを作成し、その上でリンクを実行します。

/usr/bin/avr-ar rcs build-attiny84at1/libcore.a  build-attiny84at1/WInterrupts.o  build-attiny84at1/wiring_analog.o  build-attiny84at1/wiring.o  build-attiny84at1/wiring_digital.o  build-attiny84at1/wiring_pulse.o  build-attiny84at1/wiring_shift.o  build-attiny84at1/CDC.o  build-attiny84at1/HardwareSerial.o  build-attiny84at1/HID.o  build-attiny84at1/IPAddress.o  build-attiny84at1/main.o  build-attiny84at1/new.o  build-attiny84at1/Print.o  build-attiny84at1/Stream.o  build-attiny84at1/Tone.o  build-attiny84at1/USBCore.o  build-attiny84at1/WMath.o  build-attiny84at1/WString.o
/usr/bin/avr-gcc -mmcu=attiny84 -Wl,--gc-sections -Os   -o build-attiny84at1/test.elf build-attiny84at1/sketch.o build-attiny84at1/test.o build-attiny84at1/libcore.a  -lc -lm

私の問題は、CodeBlocks リンク ステートメントの結果、コードが大幅に大きくなることです。この 2 つの違いは、Arduino の方法では最初に 1 つのライブラリを作成することだけです。2 つの逆アセンブル (.lss ファイル) を比較すると、Arduino のファイルには、ソース コードが点在する非常にタイトなファイルが含まれていました。対照的に、CodeBlocks のものは謎のコードが多く、私のソース コードの記述はありませんでした。

最初に avr-ar 経由で CodeBlocks を作成してライブラリを作成し、それをリンクする方法はありますか? それは私の問題のようですが、何か不足していますか?

4

0 に答える 0