TOPPERSについて
TOPPERSはRTOSの1つでITRON仕様のオープンソースソフトウェアとして公開されているOSです。TOPPERSの詳細は
http://www.toppers.jp/project.html を参照してください。
マイコン上でプログラムを作成する場合でも、OSがタスク制御とかをやってくれるのでマルチタスクのプログラムが作成し易い?はずです。数回に分けてTOPPERSをAT91SAM7Sに搭載させてマルチタスクOSによるプログラミングに挑戦してみます。
今回は公開されている情報をトレースし、今現在でも同様の手順で再現できるかを試してみたいと思います。動作を保証するものでもサポートされるものでもありませんが。
用意するもの
環境の構築
1.Cygwinのインストール
CygwinのWEBサイトから
setup.exeをダウンロードし実行します。
インストール中に要求されるダウンロードサイトを適宜選択し、パッケージの選択でDevelカテゴリのmakeをインストールする様にする以外はデフォルトのまま進んで構わないでしょう。
しばらくしてインストールが完了したら、ちょっとだけ修正作業をしておきます。windowsのコマンドプロンプトを起動し、以下の通り打ち込みます。
cd c:\cygwin\bin
ash rebaseall -v |
この措置を講じておかないと、後々perlの処理に支障をきたします。
2.ARM用gccの準備
こちらのWEBサイトから
yagarto-bu-2.20_gcc-4.4.2-c-c++_nl-1.18.0_gdb-7.0.1_20091223.exe をダウンロードおよびインストールします。
デフォルトの設定でインストールを進めて構いません。
3.TOPPERS/ASPカーネルの準備
TOPPERS/ASPカーネルの
TOPPERS/ASPカーネル簡易パッケージから 「
BTC090(ベストテクノロジ)簡易パッケージ」を使用します。
ダウンロードしたファイルをc:\cygwin\home\ユーザー名\ (ユーザー名はWindowsにログインしているユーザ名)に解凍します。
解凍した後のフォルダイメージはこのような感じになっていれば良いはずです。
4.カーネル用コンフィギュレータの準備
TOPPERSカーネルコンフィギュレータより
コンフィギュレータ Release 1.5.0(Windows用バイナリ)をダウンロードし、c:\cyginw\home\ユーザー名\asp\cfg\cfg (ユーザー名はWindowsにログインしているユーザ名)へ解凍します。
同名のファイルがあれば上書きして構いません。
5.書き込みツールとシリアルターミナルの準備
マイコンへのプログラム書き込み用ソフトウェアとして
GCC Developer Liteに付属するFlash WriterとopenOCDを使用します。
その他、プログラムの動作確認をするために汎用のシリアルターミナルプログラムを用意しておきます。GCC Developer Liteに付属のSIMPLE TERMでひとまず事足りるでしょう。
ひとまず必要なファイルの類の準備が終わりました。
TOPPERS/ASPをコンパイルしてみる
1.ユーザーズマニュアル
~/asp/doc/user.txt がユーザーズマニュアルになっています。必要な情報の大半が記述されているのですが、windowsのメモ帳で開くと文字化けして読めないので、ms wordやもうちょっとインテリジェンスなテキストエディタで参照しましょう。
ここまでの作業は、「3.クイックスタートガイド」の3.1~3.2に記載された内容と同等です。
2.サンプルプログラムのコンパイル
user.txt の「3.3 サンプルプログラムの構築と実行」に記載された手順を追えばコンパイルできる様ですので、順に作業してみます。
Cygwinのコンソールを起動し、以下のコマンドを順に実行します。
cd ~/asp
mkdir OBJ
cd OBJ
perl ../configure -T btc090_gcc
|
実際の画面はこのような結果になるはずです。
この操作によりコンフィギュレーションが行われます。
特に問題がなければ、最終段階のサンプルプログラムのコンパイルを行います。引き続きCygwinのコンソール上で以下のコマンドを順に実行します。
しかしながら、使用したコンパイラのせいなのか、提供されているファイルがイマイチよろしくないのか、make depend を実行した時点でerrorが発生したと言ってくると思います。
とりあえず動けばOKという事で、~/asp/arch/arm_gcc/at91sam7s/at91sam7s.ldファイルを
こちらのもので置き換えて、再度 make depend を実行します。文句は言ってこなくなったので、処理が完了した様です。
それでは最後に make を実行してコンパイルを行います。ずらずらと処理中の状況が表示された後に complete の文字が表示され、~asp/OBJ/asp.exe が作成されていればコンパイルは成功です。
続きCygwinのコンソール上で以下のコマンドを順に実行します。
cd ~/asp/OBJ
arm-elf-objcopy -O binary -S asp.exe asp.bin |
これにより ~/asp/OBJ/asp.bin ファイルが作成され、マイコンボードに書き込むためのファイルができあがりました。
マイコンボードで動かす
マイコンボードへの書き込み手段は複数ありますが、ここではJTAGを介して書き込んでみます。
また、サンプルプログラムはDBGUポートを使用してシリアル通信でメッセージを送受信するように作られていますので、SIMPLE TERMを使用して動作を確認してみます。
1.openOCDの起動
GCC Developer LiteはSAM7Sのターゲットを前提としてインストールしてあるものとします。
- TINY JTAG-ICE2をPCのUSBポートに装着(デバイスドライバのインストール要)
- BTE077のI/OボードのCN3とTINY JTAG-ICE2のJTAGコネクタをフラットケーブルで接続
- AT91SAM7S256マイコンボードのCN3とTINY-ICE2のRS232Cコネクタをシリアルケーブルで接続
- AT91SAM7S256マイコンボードのSW1をSAM-BAとは反対側に切り替え
- BTE077のI/Oボードに外部電源を接続し、I/OボードのSW1をONにして電源を供給
GCC Developer Liteを起動し、ツールバーから openOCD(SAM7S) をクリックしてopenOCDを起動します(最小化されたコマンドプロンプトがタスクバーに収まっているはず)。もし起動しないようであれば、ケーブルの接続や電源、ドライバのインストール等をチェックしましょう。また、外部からマイコンボードのFLASH書き換えやJTAG接続を使用不能にする設定になっている場合もありますので、その場合は
こちらを参照して対処してください。
2.Flash Writerで書き込み
Flash Writerは先ほど出来上がったasp.bin ファイルを openOCD を介してマイコンボードへ書き込みを行うツールです。
GCC Developer LiteのツールバーからFlash Writerを起動します。
起動したFlash Writerのタイトルバー左端にあるアイコンをクリックし、表示されるメニューから「FlashWriter Property」をクリックすると、Flash Writerのウィンドウが拡大します。
ウィンドウが拡大したら、以下の様に設定します。
- CPU TYPE: openOCD
- PORT: openOCD
- Write Script File: at91sam7_bin_flash.script
ちなみにopenOCDが起動していないとPORTのドロップダウンリストにはopenOCDが列挙されません。起動しているにもかかわらず列挙されない場合は「Rescan」とある部分をクリックしてみてください。
また、Write Script Fileのドロップダウンリストには似たような名称のものがいくつも列挙されますが、間違いなく「at91sam7_bin_flash.script」を選択しましょう。
最後にファイルを開くアイコンをクリックして先ほど作成した asp.bin を一番上のテキストボックスに設定します。
これでおそらく書き込む準備が完了したはずなので、「Execute」をクリックして書き込み処理を開始させます。書き込み中はそれにかかる処理の状況を逐一ログウィンドウで表示し、滞りなく成功すればFlash Writerのステータスバーに青色で Successful と表示されます。
3.SIMPLE TERMで動作確認
書き込み処理が成功してさえいれば、書き込み処理終了と同時にマイコン上でプログラムがスタートしているはずですが、マイコンボードの外観からは何らその様子をうかがい知る事ができないのが残念なところです。
~asp/OBJ/sample1.c を眺めると syslog 関数でテキストを吐いているだけで、LEDやブザーの類までを扱っている様には見受けられません。入力は serial_rea_dat でDBGUからシリアルデータを取得してswitch文でなにやら分岐しています。ということで、シリアルターミナルの出番です。
GCC Developer LiteのツールバーからSIMPLE TERMを起動し、SIMPLE TERMのファイルメニューのプロパティをクリックし、表示されるダイアログボックスを以下の様に設定します。
- Connect to: COM??? (???はTINY JTAG-ICE2のRS232Cで増設されるCOMポート番号)
- Baudrate: 38400 bps
- Databits: 8 bit
- Stopbits: 1 bit
- Parity: Non
- Flow Control: Non
ではSIMPLE TERMのツールバーから「指定ポートを開く」ボタン(電話のアイコン)をクリックしてみましょう。「task1 is running (????).」の表示が延々と表示され続けていれば間違いなく書き込まれたプログラムが動いている証拠です。
マイコンボードのリセットボタンを押してプログラムを再起動してみると、実行を開始したことを意味するメッセージの後に、再度「task1 is running (????).」が表示され続けます。sample1.c のソースを眺めながらswitch文で列挙されているキャラクタをSIMPLE TERMのターミナルウィンドウ上で入力してみて、何かしら表示が変化すればなおOKってところでしょうか。
ここでは sample1.c がどういった挙動をするものかまでは説明しませんので、よく眺めた上で遊んでみてくださいね。
それと、今回使用したマイコンボードはAT91SAM7S256という事で、デフォルトで想定しているAT91SAM7S128とは異なっています。両者の違いは内蔵されるメモリのサイズ程度と思えば、メモリの小さいAT91SAM7S128として構築したものをメモリの大きいAT91SAM7S256に書き込んだ所で何ら支障はありません。