AVR-GCCがマルチライブラリ対応になりました。(20000807)

   マルチライブラリ版gcc

2000/07/30にavr-libcのマルチライブラリ対応版ができたようです。コンパイルすると8k以上-以下、new core対応などにあわせたライブラリが作られます。それに伴いbinutils,gccも変更されているようです。

まあ、これでだいたい仕様の変更が終わるとおもいますので、これでまた開発が再開できそうです。インラインアセンブラなんかも進めていけそうです。


ひとまず構築してみる

●binutilsのインストール

スナップショットのbinutils-000806.tar.bz2を今回は使いました。binutilsのほうはavrのupdateがなされているようです。

./configure --target=avr --prefix=構築したい場所

make

make install

●gccのインストール

スナップショットのegcs-core-20000731.tar.gzを今回は使いました。このバージョンはまだupdateされていないようでしたのでパッチを当てます。Cプリプロセッサ(avr-gcc)でのプリプロセス時の予約語から変わっているようでパッチを当てないとまともに動かないことが予想されます。

marekさんのページにあるものをダウンロードしてきました。展開したディレクトリの最下層で
patch -p1 < avr-gcc-patch-20000730

ちょうどこのパッチがegcs-core-20000731に当たるようですが、これは近いうちにupdateされてパッチあてする必要がなくなることでしょう。とりあえず今CVSでとってきたものはupdateされていませんでした。

./configure --target=avr --prefix=構築したい場所 --enable-languages=c

make

make install

●libcのインストール

マルチライブラリ、new core対応のものが出ました!プリプロセッサからat90s1200などをコンパイルできます。avr-libc-20000730.tar.gzを展開します。

srcディレクトリで

make prefix=構築したい場所

make prefix=構築したい場所 install


どのようになったか

●binutils

コアの種類わけが追加されています。基本は-mmcu=avr1〜avr5といった分け方となっており、-mmcu=at***のほうからも指定できます。new core用の命令も入っています。

Known MCU names:
avr1 avr2 avr3 avr4 avr5 at90s1200 attiny10 attiny11 attiny12 attiny15
attiny28 at90s2313 at90s2323 at90s2333 attiny22 at90s2343 at90s4433
at90s4414 at90s4434 at90s8515 at90s8535 at90c8534 atmega603 atmega103
atmega83 atmega85 atmega161 atmega163 atmega32 at94k

といった感じです。

●gcc

呼び出し規約の変更は0726のレポートのとおりですが、-menhancedオプションがなくなり、/gcc/config/avr/avr.cの200行付近にあるように-mmcu=***で自動的にコアの種類を判別するようになっています。またbinutilsのほうの変更に伴いプリプロセッサ処理で定義されるnameも変わっています。

Known MCU names:
avr2 at90s2313 at90s2323 attiny22 at90s2333 at90s2343 at90s4414 at90s4433 at90s4434 at90s8515 at90c8534 at90s8535
avr3 atmega103 atmega603
avr4 atmega83 atmega85
avr5 atmega161 atmega163 atmega32 at94k
avr1 at90s1200 attiny10 attiny11 attiny12 attiny15 attiny28

となっています。ただしavr1のカテゴリはcコンパイルはできませんが-x assembler-with-cppオプションでプリプロセッサを通してアセンブラを呼び出すことができます。超便利。またリンクするときもコアの種類によってmuls命令を含むもの、含まないものといった適当なライブラリが呼び出されるようになっています。

●avr-libc

マルチライブラリ対応版です。libc,libmなどにcall-rcall使い分けやmovw-muls命令の有無といった4種類のライブラリができています。リンク時に呼び出されます。

スタートアップ用オブジェクトファイルもありますのでプリプロセッサ経由でAT90S1200などもこれで直接開発できるようになりました(アセンブラで)。プリプロセス時のコア種類判別識別語はio-avr.hに書かれてあります(前後にアンダーバーが入るようになりました)。


まとめ

これで、新しい環境がだいたいそろったようです。細かいところもだいぶよくなっているようです。
私ごとですがまた開発再開できそうです。ところでmegaAVRどっかにありませんか?


戻る