このページは以前のものです。(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集です。

AVR-TIPS


戻る