このページは以前のものです。(2000/05/18)
binutils-2.9.5.0.13で構築したものです。binutilsにパッチを当てています。現在のものはパッチを当てる必要はありません(binutils-2.9.5.0.42)。
avr-libcも古いです。
GCCによるAVRの開発環境について |
現在AVRをGCCにより開発可能となっております。そこで私がセットアップした際の情報を紹介します。
私の環境ではSlackware-7.0上で構築しました。
またGNU-AVRツールはここからもダウンロードできます。
なお、これらのツール群はやがてGNUのmain streamに合流することが決定しています。(作者の方は大変喜ばれているようです。)
同様のものとしてAVAと呼ばれるアセンブラもありますがこちらは収束してbinutilsのほうでまとめていく予定だそうです。
●binutilsのセットアップ
binutils-2.9.5.0.13を展開します。
・パッチを当てる
パッチファイルは binutils-2.9.5.0.13-avr-patch-1.1.gz でした。
patch -p1 < パッチのファイル名
・コンフィグレーション
./configure --target=avr --prefix=構築したい場所
・メイク
make
・インストール
make install
ここでAVRツール類のbinディレクトリにパスを通しておいてください。
●gccのセットアップ
gcc-core-2.95.2を展開します。
・パッチを当てる
パッチファイルは gcc-core-2.95.2-avr-patch-1.1.gz でした
patch -p1 < パッチのファイル名
・avr-ML上に一部バグ情報が出ていましたのでそれを訂正します。(コンパイルできません)
/gcc/config/avr/libgcc.Sの27行目
#define Ludivhi3
同フォルダのavr.hの5010,5011行目
-m avr44xx を avr44x4 に変更(両行とも)
・コンフィグレーション
./configure --target=avr --prefix=構築したい場所
・メイク
make
・インストール
make install
●avr-libcのセットアップ
今回は avr-libc-20000201.tar.gz を使用しました。(注)これを入れないとコンパイルできません。
展開して、
make prefix=構築したい場所
make prefix=構築したい場所 install
●ためしに使ってみる
以下のプログラムを試しに使ってみます。
test.c :
void main(void) { int i; int x; x = 0; for(i = 0;i < 100;i++){ x += i; } }
ここで
avr-gcc -mmcu=at90s8515 test.c -S
としてアセンブラコードを吐かせてみると
test.s :
.file "test.c" .arch at90s8515 __SREG__ = 0x3f __SP_H__ = 0x3e __SP_L__ = 0x3d __tmp_reg__ = r0 __zero_reg__ = r1 _PC_ = 2 gcc2_compiled.: .section .text .global main .type main,@function main: /* prologue: frame size=4 */ ldi r28,lo8(0x25f - 4) ldi r29,hi8(0x25f - 4) out __SP_L__,r28 out __SP_H__,r29 /* prologue end (size=4) */ std Y+3,__zero_reg__ std Y+4,__zero_reg__ std Y+1,__zero_reg__ std Y+2,__zero_reg__ .L3: ldd r24,Y+1 ldd r25,Y+2 cpi r24,100 cpc r25,__zero_reg__ brlt .L6 rjmp .L4 .L6: ldd r24,Y+3 ldd r25,Y+4 ldd r18,Y+1 ldd r19,Y+2 add r24,r18 adc r25,r19 std Y+3,r24 std Y+4,r25 .L5: ldd r24,Y+1 ldd r25,Y+2 mov r18,r24 mov r19,r25 subi r18,lo8(-(1)) sbci r19,hi8(-(1)) std Y+1,r18 std Y+2,r19 rjmp .L3 .L4: .L2: /* epilogue: frame size=4 */ __stop_progIi__: rjmp __stop_progIi__ /* epilogue end (size=1) */ /* function main size 32 (27) */ .Lfe1: .size main,.Lfe1-main /* File test.c: code 32 ( 27), prologues 4, epilogues 1 */
のようにコンパイルできます。(す、すげえ。)
通常は、
avr-gcc -mmcu=at90s8515 test.c -o test.elf
avr-objcopy -O srec test.elf test.srec
としてコンパイルすると、Sレコードの出力ファイルができます。オブジェクトファイルを使わずに直接Sレコードにするのも完全ではないようです。avr-objcopyを使用してくださいとのことです。
HEXフォーマットは
avr-objcopy -O ihex test.elf test.hex
です。(こちらもavr-objcopyをつかうようにとのことです。)
●コンパイラスイッチの抜粋
-mmcu8515
CPUの選択
-mint8
intを8bitにする
●newlibのインストール
newlibもつかえるのでしょうか。まだ試してません。->まだ使えません(2000/05/18)
初期のAVR-MLからピックアップしたtips集です。