WINAVRについて
WINAVRについてのメモです。本館にもありますが、時間の経過とともに変わっているところもありますので書き換えました。
2 2011年以降の AVR gcc を使う
1 複数のバージョンを切り換えて使う
2 2011年以降の AVR gcc を使う
序: WINAVRは20100110版以降は更新されていません。それ以後の新しいバージョンはWINAVRではなく、 avrstudio に含まれる形で発表されることを遅蒔きながら認識しました。 私が知らなかっただけで多くのサイトで話題になっていたようです。
千秋ゼミのサイトで avr-toolchain-installer-3.3.0.710-win32.win32.x86.exe のダウンロードを知り、インストールしましたが既成の「makefile」は実行できませんでした。WINAVRには makefile の雛形があったのですがこのファイルには含まれていないようです。 そこで仕方なく使う予定のないavrstudio5 をインストールすることにしました。
Avrstudio5のダウンロードとインストール:
ATMELのホームページからこのページへ進んで AVR Studio 5 installer (includes VSS and .NET) の左にあるregisterマークをクリックします。
登録画面になりますから適当に埋めます。該当しないときは「not」を書き込みました。 登録が完了するとメールアドレスにURLが送られてきますのでそこからダウンロードします。
as5installer-full-5.0.1223.exe が得られます。これを実行すると AVR Studio 5 がインストールされます。
例によって空白を含む長い名前のフォルダにセットアップされますからそれを避けるために c:\avr\toolchain にインストールしています。それでもなお空白を含むフォルダを生成しますからインストールの後で空白を消去して名前を詰めました(AVRToolchain)。
Pathは C:\AVR\toolchain\AVRToolchain\bin と C:\AVR\toolchain\AVRToolchain\avr\include に通しています。
makefileの準備:
今まで使ってきたmakefileは使えません。そこで studio5 から検索で Makefile を探しました。この中の
C:\AVR\toolchain\AVRToolchain\doc\avr-libc\examples\largedemo\Makefile をコピーして
PRG = largedemo
OBJ = largedemo.o
MCU_TARGET = atmega16
の部分を変更するとコンパイルできました。
重大な課題:
単純なプログラムはこれでコンパイルできそうですが、多くの問題点が残ります。
1 PRG とOBJ に同じ名前を繰り返して入力する必要があるか?
2 MCUのクロックをどこで宣言できるのか?
3 同時にコンパイルしたい.cファイルはどう書けばよいのか?
4 アセンブリファイルがあるときはどうすればよいのか?
今までのmakefileでは問題なく過ごせたものですが今回のmakefileは簡単なのは好ましいのですが悩みはつきません。
試行錯誤でここまで辿りつきましたが、これまでにも理解に誤りがあるかもしれません。
現在は2010版のWINAVRで十分なのですがやがては新しいものが必要になるかと思います。
2011.12,11追記
makefileの様子が少し分かってきました。実機での確認は未だしていませんがコンパイルは正常にできているようです。
サンプルの「largedemo」のmakefileを元に次のように初めの部分を書き換えました。
(サンプルの DEFSで始まる行までを次のように置き換えています。2011.12.12)
#-------- Makefile for 4.5.1 modified by im 20111212 --------#
PRG = prog_name
################ ↑プログラム名 .cは付けない ########################################################
SRC = $(PRG).c file1.c
################ ↑同時にコンパイルするものは .c を付けて続ける #####################################
MCU_TARGET = attiny2313
########################################### atmega8 atmega48 atmega88 atmega168 attiny2313
F_CPU = 8000000
#####################################################################################################
OPTIMIZE = -Os
################# ↑#################################################################################
OBJ = $(SRC:%.c=%.o)
DEFS = -DF_CPU=$(F_CPU)UL
( ########### は自分が注意を払うために付け加えています)
これで上記の課題の内アセンブリファイルがある場合を除き解決したのではないかと思います。
アセンブリファイルについては別のサンプルから調べることになりますが、時間がかかりそうです。
今まで使ってきたmakefileと違ってhexファイルのサイズなどが表示されないのは残念ですが、まずは働くようです。
makefileサンプルをここに置きます。(2011.12.13 miyamaeさんがサイズ表示を付け加えてくれました。謝)
1 複数のバージョンを切り換えて使う
>junction C:\winavr C:\WINAVR06 winavr2006を使う (この説明は後述です)
>junction C:\winavr C:\WINAVR07 winavr2007を使う
>junction C:\winavr C:\WINAVR10 winavr2010を使う
>junction -d c:\winavr junctionを解除する
>junction c:\winavr どれを使っているか表示する
新しいバージョンが出たけれども慣れた旧バージョンも使いたい、古いソースは古いバージョンでないとコンパイルできない、などでバージョンを切り換えて使いたいときに便利です。
winXP の NTFSシステム で使えます。(win2000も使えるとか)。 win7 は別の方法だそうです。
まず、junctionコマンドを用意します。Windows Sysinternals からjunctionをダウンロードします。
zipファイルを解凍するとjunction.exeができます。コマンドプロンプトを立ててその中にこのjunction.exeをドラッグ&ドロップして実行しますとインストールされます。これでjunctionコマンドを使う準備ができました。
このコマンドは、フォルダに別名を付けて、別名で使用できる環境を作るものです。
いま仮に、C:\に フォルダA と フォルダB という2つのフォルダがあるとします。このとき、
>junction C:\フォルダA C:\フォルダB --@
とすると フォルダA は フォルダB を参照します。
>junction C:\フォルダA C:\フォルダC --A
とすると フォルダA は違った フォルダC を参照します。
フォルダA を使用するプログラムは、@を実行すればフォルダB を使うことになりますし、Aを実行すればフォルダC を使うことになります。
WinAVRは珍しくレジストリをほとんど使わないプログラムだそうです。フォルダにファイルを置くだけの素直なものです。したがって、このフォルダを切り換えれば複数のWinAVRを使い分けることができるそうです。(作者に感謝!) しかし、avrstudioではレジストリを使いますからここの説明だけでは使えません。
複数のwinavrをインストールするときに少し工夫が必要です。いま、 WinAVR20060421 WinAVR20070122 WinAVR20100110 をインストールするとします。大切なことはこれらを使用するときにそれぞれにpathが通っていることが必要なのですが、pathはインストール時のフォルダ名で登録されますから、すべてwinavr名でpathを通す必要があります。junction.exeで使うときはバージョンに関係なく winavr で使いますからpeth名はwinavrが必要になるわけです。
そこで、
WinAVR20060421は c:\winavrフォルダ にインストールします。インストール後に winavr06 と改名します。
WinAVR20070122は c:\winavrフォルダ にインストールします。インストール後に winavr07 と改名します。
WinAVR20100110は c:\winavrフォルダ にインストールします。インストール後に winavr10 と改名します。
(改名しないと上書きされます。)
コマンドプロンプトで上に書いた
>junction C:\winavr C:\WINAVR06
をコピペで実行すると winavr は winavr2006 を使うことになります。
続いて
>junction C:\winavr C:\WINAVR07
を実行すると winavr2007 使用に変更されます。
重大な注意:
・さらにインストールするときは >junction -d c:\winavr を使って junctionを解除する 必要があります。
単純にデリートするとjunction機能だけと違って本体まで削除されます。
・使用中の切替は御法度です。安全弁はありません。
・なお、この機能は自己責任で使え、と指示があります。
なお、以前にkkkさん(今は連絡が取れませんが)から「リンク作成シェル拡張for Windows 2000/XP をインストールするとjunctionフォルダのアイコンのデザインが変わる上に消去しても元のフォルダは消えない」と教えていただきました。 http://sourceforge.jp/projects/sfnet_lnhdr/downloads/lnhdr/lnhdr-1.52/lnhdr-1.52-x86-ja.msi/ からダウンロードした lnhdr-1.52-x86-ja.msi を実行するとインストールされます(再起動が必要です)。
参考
作者 川崎 高志さんのページです。
1 複数のバージョンを切り換えて使う おわり
工事中