2007年9月6日木曜日

スクラッチからAVR-GCC構築中 on Linux (その2)

前回、binutil / gcc-core / avr-libc の使っているバージョンを書くのを忘れてしまいました。各々 binutils-2.18 / gcc-core-3.4.6 / avr-libc-1.4.6 です。これらの組合せでavr-gccをFC4の上に構築できますが、ATtiny2313がサポートされていないのは前回書いた通りで、原因はgcc-core-3.x以前のavr.cにはATtiny2313が定義されていないためです。gcc-core-4.x以降ではその部分は以下のようになってます。

(gcc-4.2.1の場合)
static const struct mcu_type_s avr_mcu_types[] = {
/* Classic, <= 8K. */
{ "avr2", ARCH_AVR2, NULL },
{ "at90s2313", ARCH_AVR2, "__AVR_AT90S2313__" },

-- snip --

/* Classic + MOVW, <= 8K. */
{ "avr25", ARCH_AVR25, NULL },
{ "attiny13", ARCH_AVR25, "__AVR_ATtiny13__" },
{ "attiny2313", ARCH_AVR25, "__AVR_ATtiny2313__" },


ほかにも

/* List of all known AVR MCU types - if updated, it has to be kept
in sync in several places (FIXME: is there a better way?):
- here
- avr.h (CPP_SPEC, LINK_SPEC, CRT_BINUTILS_SPECS)
- t-avr (MULTILIB_MATCHES)
- gas/config/tc-avr.c
- avr-libc */

と書かれているので、このあたりの変更が必要のようです。パッチを探しているのですがmcuの追加だけのパッチは今のところ見つかっていないのでリスク覚悟で"手直し"かもしれません。WinAVRのgcc-3.xバージョンでもATtiny2313はサポートされていないのだろうか? ネット検索してもそんな話題がひっかからないのでおそらくサポートされているんでしょう。

gcc-3.4.6とgcc-4.0.4でavr-gccを作ってみたので、ATtiny2313ではありませんがATmega8でコンパイルして違いを比較してみました。ものは、USBaspのソースです。出来上がりは、

10155 9月 4 05:32 main.hex_3.4.6
10638 9月 6 06:06 main.hex_4.0.4

位の差が出ました。ATtiny2313のようにROM容量の少ないデバイスには5%の差が大きくのしかかる状況も出て来るかも知れません。さて、この先どうしましょう、、、悩ましいところです。

0 件のコメント:

++ Myself ++

普通(?)のサラリーマン -- 生活のすきま時間にキーボードとはんだごてを持ち替えてプログラミングと電子工作してます