TAP-AVR
AVRマイコンについての話題が中心のページです。PICはアドレス空間がリニアでなくアセンブラのときは特に問題ないのですが、Cコンパイラ等の相性があまりよくない部分(ページング処理がたくさん入る)があります。AVRはCコンパイラでの開発を考慮してか、リニアなアドレス空間、多くのレジスタを持っており、Cを使った環境に向いているのではないかと思います。
AVRをGCCで開発する(開発環境のセットアップ) |
このページはAVR-GCCの「追っかけ」のページです。2001年に入ってからは多くの情報がAVR-Freaksのページにあります。
お品書き |
AVRに関する情報です。(メインのページです)
● AVRのプログラミング(GCC、割り込み、RS232C、ADC、インラインアセンブラなど)
企画もの
● AVRでDhrystoneを走らせMIPS値を測定する
● MS-Windows上CygwinでAVR-GCC+AvrStudio3.5でCソースレベルデバッグ(アップデート2001/09/15)
● AVR-GCCのインラインアセンブラ解説の日本語訳
● NewCore搭載ATmega163でベンチマーク測定する
AVRに関する情報 |
ここでは主にAVR-GCCの新着情報をまとめてみたいと思います。
・2002/06/30 avr-libc-20020630でAVR特化のヘッダーが/avr/以下に移動された。
・2002/06/02 avr-libc-20020602でc++のconstructors/destructorsに必要な変更が行われた。global
con/destructorのみ。
・2002/05/11 GCC3.2(現在CVS)ではcbi, sbi, sbic, sbisが直接ビット演算時に使われるようになった。またATmega128を正式にサポート。-mmcu=avr5という形式に移る。
・2002/04/21 uisp-20020420リリース。
・2002/02/20 binutils-020218現在、mega323、mega128などのサポート。ただし、ローダスクリプトはavrmega161.xからメモリの大きさを変えて自前で作る。gcc-core-20020218で新しいチップの追加。
・2002/01/16 avr-lbc-20020115.tar.gzでautoconf/automakeを使用したバージョンになっています。buildの方法はdoconf/domakeというスクリプトを使用します。
・2001/10/30 uisp20011025.tar.gzでS2,S3フォーマットが読めるようになっています。avr-libc-20011029.tar.gzでeeprom関連が分割されたようです。この調子で分割が進めばできるファイルが小さくなるはず。
・2001/09/26 avr-gccのelfフォーマットをAvrStudioのobjに変換するプログラムがAvrFreaksにアップされました。ほんとにマジックナンバーから読んでる、これはいい。
・2001/09/15 uisp-20010909にpavrのコードが含まれるようになりました。1ヶ所変更するだけでavr910と差し替えできます。小変更やバグとりが時々続けられていますが、特に大きなものはないようです。
・2001/07/09 avr-libc-20010708にアップデートされています。__fixsfsiを直したそうです(やっぱバグだったのね)。コールをXCALLに、atoiのfix、atanの追加など。
・2001/07/03 avr-libc-20010701にアップデートされました。文字列処理関連が追加。およびひとつ前のバージョンではgcc3.0でのテストがなされています。uisp-20010701が出ています。シリアルプログラミング関連のfixなど。uisp
--helpに出ています。gccは20010628でデバッグ時の名前を統一してわかり易くしたり、しています。
・2001/06/05 gccは2001/05/13にアップデートされているようです。現在最適化関連がうまくいかない場合があるようですので-Oにおとして構築するのもいいと思います。実際コードサイズはあまり変わらないようです。
・2001/05/08 uisp-20010501.tar.gzができています。それとともに、ispの書き込み側のファーム(at90isp23.asm)が新しいデバイスにも対応してます。ここに公開されています。usipのほうが新しいデバイスの対応とともに、外部AVRなしにDAPAのようにシリアルポートに直接AVRのピンをつないでプログラムできるモード(DASA)が追加されています。helpかmain.cの57行あたりにつなぎ方が書いてあります。
・2001/04/29 ML上で知ったんだけどAVR-freaksのページはいろんな情報があっていいっす。特にAVR-gccのマニュアル的pdfファイルは読むべし。
・2001/04/03 gcc-core-20010402.tar.gzのスナップショットで掛け算に関するバグが修正されています。これ以前のバージョンにはすべてこのバグが入っているそうです。ライブラリはavr-libc-20010331.tar.gzにアップデートされています。これはitoaのために整数割り算余り関連の修正。itoaがそのまま使えるのはおいしい。binutilsは010314にアップデートされています。
・2001/03/08 avr-libc-20010303.tar.gzが出ています。avr-gccが2001/02/12にアップデートされています。最新のスナップショットはgcc-20010305.tar.gzとなっています。gccはVer3がついています。
・2001/02/11 avr-libc-20010211.tar.gzおよびuisp-20010211.tar.gzがリリースされました。なおlibcの公開場所がここに移っているようです。
・2001/01/13 avr-gccが2001/01/06にアップデートされています。最適化関連がよくなっているようです。-Osや-O9等は調子悪くて(動作もおかしい)、単に-Oとするとサイズが小さくなります。
・2000/12/21 uisp-20001216.tar.gzが出ています。megaAVR163対応、フラッシュやEEPROMの読み出しなどAVR-MLに出ていたパッチ相当の機能も追加されています。これはつかえる。
・2000/12/03 avr-libc-20001125.tar.gzが出ているようです。これに伴いgccも11/25にアップデートされているようです。動作確認はbinutils-001202.tar.bz2
gcc-core-20001127.tar.gz avr-libc-20001125.tar.gzです。
・2000/11/27 uispがMarekさんの手により改良が加えられているようです。avr910.asmの標準プログラマとの組み合わせでmega163等をサポートしたそうです。This
is an unofficial update for uisp-0.2b-1026, as Uros seems to be
unreachable. だそうです。詳しくはreadmeファイルの中にあります。
・2000/08/23 avr-gcc最新版がcygwin上で普通にコンパイルできるようになっていました。最新のnet-release版で確認しました。これでwin上でavr-gccが走ることになります。
・2000/08/07 avr-libc-20000730が出ています。新しい呼び出し規約のgcc用です。パッチを当てたgccで使用できます。これで一通り開発再スタートできそうです。内容はこちら。以降はこの新しいバージョンを基準に進めていきたいと思います。
・2000/07/26
やはり、関数call conventionが最新バージョンで変更されているようです。内容はこちら。
・2000/07/05
ちょっと前ですがbinutilsのnew core 用の変更が行われているようです。スタックを小さくするオプションとコードサイズ8K以上のモードの変更です。あと、Cの関数コールに関して変更があるかも知れません(movwやmulを入れることに関してです)。作者たちの間でもこれに関して議論がなされているようです。よってインラインアセンブラの書き方も特に関数コール方法に関して変わるかもしれません。このあたりはstableになってからまとめたいと思います。
・2000/06/22
特にmegaAVRに関して品不足のようです。アメリカでもorderをhaltedしている状態だそうです。(, but don't
hold me to that) 次のオーダーは2001年からとか。あと9から12ヶ月で新しい工場ができて価格も下がるとのことです。
・2000/06/21
avr-libc-20000613.tar.gzなどCVStree用パッチが更新されています。(experimental)
・2000/06/08
avr-libc-20000606.tar.gzが出ているようです。またCVStree用のパッチが出ています。(experimental)
・2000/05/18
avr-libc-20000514.tar.gzが出ているようです。
・2000/05/13
binutils-2.9.5.0.42 --target=avr --prefix=構築したい場所 egcs-20000508
--target=avr --prefix=構築したい場所 --enable-languages=c で使用可能となっているようです。Anonymous
CVS treeからとってくるようです。stableではありません。
・2000/05/07
gcc-2.95.2-avr-1.1-new-binutils.diff.gzが出ました。gcc-core-2.95.2-avr-patch-1.1をあててその後にこれをさらにあててくださいとのことです。2つのbug
fixをしたそうです(stableなものです)。これは新しいbinutilsを使うときに必要です。
・2000/05/04
avr-libc-20000503.tar.gzリリース。
・2000/04/02
avr-libc-20000401.tar.gzリリース。
・2000/03/31
binutilsのsnapshotに追加されるようです。gccも同様にsnapshotに追加されつつあります。
・2000/03/14
Gnu.org just announced the inclusion of your port! だそうです。
・2000/02/08
avr-libc-nma-20000207.tgzリリース(nma means non-marek-approved)
・1999/12/24
gcc-core-2.95.2-avr-patch-1.1.gzリリース。あわせてavr-libc-19991224.tar.gzリリース。
・1999/12/18 avr studioでデバッグ可能なcoff形式出力パッチが作られる。
GCCによるAVRの開発環境について |
2002/09/27の状態でのセットアップについて
CVSアクセスは面倒ですのでスナップショットを使いました。基本的に新しいのを使用してセットアップできるはずです。以下のものはlinuxやcygwin上で構築できます。
・binutils-020925.tar.bz2 (ここから)
./configure --target=avr --prefix=構築したい場所
make
make install
・gcc-20020923.tar.gz2 (ここから)
./configure --target=avr --prefix=構築したい場所 --enable-languages="c,c++"
make
make install
現在c++が使えるようになってきている模様。まだ不安定です。
・avr-libc (ここから)
最新版はCVSで管理されています。c++のサポート関連で大きく変わっているので、自分でセットアップする場合はすべて最新版でそろえる必要があります。まずはcvsでとってきます。
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/avr-libc
login
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/avr-libc -z3
co uisp
cvsツリーの中にはconfigureスクリプトがありませんので、通常の方法で作成します。落としてきたディレクトリで順番に
aclocal
autoheader
automake
autoconf
を実行します。automakeの時にいくつかシェルスクリプトライブラリがないといってくるので、automakeのsrcをダウンロードしてきてその中から適宜、追加します。あとは
./configure --target=avr --prefix=構築した居場所
make
make install
現在avr特化のヘッダーが<avr/*.h>の中へ移動しています。c++関連は現在調整中だそうです。
・uisp (ここから)
こちらもCVSに入っています。avr-libcと同じ要領でconfigureスクリプトを作成します。その後
./configure --prefix=構築した居場所
make
make install
uisp --helpでつなぎ方使い方などが簡単に説明されます。
・書き込みのファーム (ここから)
at90isp23.asmを書き込みます。新しいデバイスはwin版の書き込みソフトからリバースして対応させたとか。私も作ってみました。AtmelのAProgWin1.33(フリー)から、mega163など新しいデバイスも選択できるようになります。アセンブルしたあとのhexファイルはこれです。回路は同じです。
上記の環境が整ったらpavrがuispの中にあるのでavr-gccでコンパイルしてAT90S2313に書き込んでもいいと思います。100行あたりのMISOとMOSIのピン番号を入れ替えると、書き込み器のページのものと差し替えるだけで動きました。このpavrはavr910互換でAvrStudio3.5からも使えて、タイミングの問題も解決しているそうです。
・マニュアル(ここから)
AVR-freaksのページに少しあります。libcに関するものとgccに関するものです。
インラインアセンブラCOOK BOOKの日本語訳<=もしおかしいところがあったらご意見ください。
・オブジェクトコンバータ(ここから)
上記のbinutilsのパッチは簡易版のオブジェクトを出力するもので、変数等は見えません。ElfCoff.exeを使用することでavr-gccの出力するelf形式オブジェクトファイルをAvrStudioの標準形式のcoffフォーマットに変換でき、変数等を直接みることができます。ただし変数を見たいときはvolatileをかけてメモリ上に変数を展開していないと見れないことがあります。杉垣さんのページで丁寧に解説されています。
●gccの現在のサポートMPU
基本的に-mmcu=st90s8515などとできるが現在20種類以上メモリの組み合わせがあるため5種類に分類されている。以下は-mmcuオプション時の名前と最大容量の関係。リンカスクリプトはSRAMのスタートは0x60だが、__stackやSRAMの終わりは定義されていないため、リンカスクリプトを自前で書き直す必要がある。やがて下の5種類しか受け付けなくなる予定らしいのでavr*の形で指定したほうがいいと思う。
arch | flash | SRAM | EEPROM |
avr1 | 8K | 0 | 64K |
avr2 | 8K | 64K | 64K |
avr3 | 128K | 64K | 64K |
avr4 | 8K | 64K | 64K |
avr5 | 128K | 64K | 64K |
実際にはavr-gcc -Wl,--defsym,__stack=0x85fといった感じでコンパイラで渡すのがいい。
以前のバージョンのものを置いておきます。
・binutils-2.9.5.0.13による構築
テスト用のファイルです。とりあえずこれをmakeでもしてみてください。
uisp 書き込み |
uisp(上記参照)はLinux用の書き込みプログラムです。I/Oアクセスでプリンタポートに配線するのみでプログラムが可能なモードを持っています。配線はこのようになります。
またuispはcygwin上でもavr910やpavr(上記参照)書き込み機として使用可能です。uisp-20020819-cvsをcygwinでコンパイルしたものをおいておきます。cygwinでコンパイルするとwindows(95/NT系) nativeでdos窓で動きます。これをダウンロードするとuisp.exeとcygwin1.dllができますので、cygwin1.dllをuisp.exeと同じフォルダに置いておいてください。このシリアルの動くdlはcygwin1.3.2のものです。シリアルポートは/dev/com1にありますので、使い方はdos窓上で
消去:uisp -dserial=/dev/com1 -dprog=avr910 -dpart=auto --erase
書き込み:uisp -dserial=/dev/com1 -dprog=avr910 -dpart=auto --erase
--upload --verify if=rom.hex
などとなります。詳しくはuisp --helpでヘルプが出ます。makeの中にかけるので便利。
でも最初に書き込み機にファームを書き込む必要があるんだよね。AVRstartのページ参考に。
AVR-links |
・Atmel Corpolation
AVRの製造元。
・AVR-GCC
GNUツールの開発者のページです。(Denis Chertykovさん)
・MAPP
AVR-MLの管理者。簡易OS。すばらしきGNU文化。(Uros Platiseさん)
・AVR-libc
AVR-libcの作者。(Marek Michalkiewiczさん)
・AVR-freaks
AVR-gccのマニュアルなどいい情報がたくさん。windows版のavr-gccパッケージはここから。
・bluecollar Linux
AVR-FAQ。その他ブルーカラーな話題がたくさん。必見。
・eAVR Interfacing Atmel AVR
with an ISA bus ethernet card
AVRとISAのイーサネットをつなぐ!(NE2000)、pAVR書き込み機。
・Radio Technica
AVRのデータシートの日本語版を作成されています。その他の記事もすごい。