Howto

Armadillo-400シリーズでOS-9を動作させる(4: ユーザープログラムの作成)

OS-9について

OS-9はコンパクト、高速でセキュアなプロセスモデルの組込用リアルタイムOSです。 組込業界で20年以上の採用実績があり、特に試験計測、FA、メディカルなどのクリティカルなリアルタイム性能を要求される分野で広く使われています。

本シリーズでは、Armadillo-400シリーズでOS-9を動作させる方法を4回に分けて紹介します。
Howto : Armadillo-400シリーズでOS-9を動作させる(1: SDKのインストール)
Howto : Armadillo-400シリーズでOS-9を動作させる(2: OSイメージの作成)
Howto : Armadillo-400シリーズでOS-9を動作させる(3: Armadilloへの書き込み)
Howto : Armadillo-400シリーズでOS-9を動作させる(4: ユーザープログラムの作成)
本文中でArmadillo-410,420,460用の設定が明記されていない個所はArmadillo-440と同一の設定を行ってください。

ユーザープログラムを作成する

ユーザープログラムを作成する例題として、組み込みでは最近定番のLED点滅プログラムを作ってみます。

ここで説明するLED点滅プログラムは、GPIOドライバを使用します。OSイメージにGPIOドライバが組み込まれている必要があります。
ConfigurationWizardでこちらのHowToに従ってBeginnerモードで作ったOSイメージならGPIOドライバは組み込まれる筈です。

まず、Hawkを起動したら Project→Project Space→New を選択します。

ScreenShot

Create a New Project Space ダイアログが表示されます。ここでは、プロジェクトファイルを C:\MWOS\PROJECTS\TEST1 に置く事にします。初期のディレクトリが C:\MWOS\DOS\BIN になっているので、変更するために Browse..をクリックします。

ScreenShot

ファイルの場所を C:\MWOS\PROJECT にします。

ScreenShot

TEST1というサブフォルダを作成するため、新しいフォルダを作成します。

ScreenShot

新しいフォルダの名前をTEST1に変更します。

ScreenShot

TEST1へ移動し、ファイル名の欄にプロジェクトスペースファイル名を入力します。ここでは test1 とします。Set as CWD にチェックが付いている事を確認して開くをクリックします。

ScreenShot

Filenameの欄に C:\MWOS\PROJECTS\TEST1\test1.psp がセットされます。test1.psp がプロジェクトスペースファイルです。OKをクリックします。

ScreenShot

Project Properties ダイアログが表示されますので、Membersタブを選んでプロジェクト追加アイコンをクリックし、プロジェクトを追加します。

ScreenShot

Add New Project to Project Space ダイアログが表示されるので、Filename 欄にプロジェクト名を入力します。ここでは ledtest とします。入力したらOKをクリックします。

ScreenShot

ledtest プロジェクトが追加されました。プロジェクトにファイルを追加するため、ledtest プロジェクトを選択し、新規ファイル追加アイコンをクリックします。

ScreenShot

Add New File to Project - ledtest ダイアログが表示されるので、Filename 欄にソースコードのファイル名として ledtest.c を入力し、OKをクリックします。

ScreenShot

プロジェクトに ledtest.c が追加されたので OK をクリックします。

ScreenShot

ledtest というプロジェクトに、New Component というコンポーネントが作成された状態になります。先ほど追加した ledtest.c は New Component に含まれています。プロジェクトは1個または複数のコンポーネントで構成されます。コンポーネントは作成するモジュールやライブラリなどに相当します。

ScreenShot

New Component を右クリックしてドロップダウンメニューを表示し、Rename を選択して名称を ledtest に変更します。

ScreenShot

コンポーネント名が ledtest になりました。

ScreenShot

ledtest.c にソースコードを記述します。プログラムの内容は以下の通りです。

この程度の内容ならコマンドラインで、

C:\MWOS\PROJECTS\TEST1> xcc -tp=armv5le ledtest.c -fd=ledtest -g

のようにするだけでコンパイル出来るのですが、コマンドラインでのコンパイルについては別の記事で。

Hawkのエディタを使ってledtest.cにソースコードを入力します。エラーが出た時を試すために、何かエラーになるような文を適当に仕込んでおいて下さい。

ScreenShot

ソースコードを入力したら、コンポーネントの設定をします。ledtestコンポーネントを右クリックしてドロップダウンメニューを表示し、Properties...を選択します。

ScreenShot

Properties ダイアログが表示されます。Chipが68000になっているので、これをARM V5LEに選択し直します(正直に言うとChipの初期選択が68000になっているのはHawkのバグです)。

ScreenShot

設定を変更すると、赤い字で Mode: Edit と表示されます。この表示がある状態では設定の変更はまだ保存されていません。作成するプログラムはユーザステートで動作するプログラムなので、Type は User State Program のままにします。Output File(出力されるモジュールのファイル名)が ledtestである事を確認します。

ScreenShot

MAPファイルを作成したり、追加のライブラリを使用する場合の設定は Link タブを選択します。

ScreenShot

ここではマップファイル Symbols (Arphabetic Order) を作成する事を指定します。最後に左上のチェックボタンをクリックして、設定変更を反映します。

ScreenShot

設定が反映されると、赤い字で Mode: Edit と表示されていた箇所が Mode: Browse に変化します。この状態では設定変更が反映されています。

ScreenShot

ソースコードの編集を終えしたら、ツールバーの保存ボタンをクリックして未保存のファイルを保存します。Build時に保存されていないファイルを自動で保存はしないので、Build前に必ず明示的に保存して下さい。

ScreenShot

ファイルを保存したら build してみます。プロジェクトを右クリックしてドロップダウンメニューを表示し、Build を選択します。

ScreenShot

Buildが終了すると Build Complete ダイアログが表示されます。何かエラーが検出された場合は、Status に There were errors! と表示されます。

ScreenShot

Output ウィンドウに表示されているメッセージに従ってソースコード等を修正し、再度Buildします。

ScreenShot

Buildを中断するようなエラーが無ければ Build Complete ダイアログの Status に Done が表示されます。何もメッセージが無い場合は Output ウィンドウにメッセージは表示されません。

ScreenShot

Component の設定で変更していないので、中間ファイルや出力ファイルは全てプロジェクトと同じフォルダに作成されます。build 後の C:\MWOS\PROJECT\TEST1 フォルダはこのようになります。

ScreenShot

出来上がったモジュールを Hawk Debugger でデバッグしてみます。メニューのDebugから Connect を選びます。なお、HawkDebuugerを使用したリモートデバッグにはリモートデバッガを構成したターゲットシステムが必要です。ConfigurationWizardによるOSイメージ作成時の設定箇所は、こちらを参照して下さい。

ScreenShot

Connect ダイアログが表示されます。ローカルにあるモジュールをターゲットへ転送してデバッグする場合は Fork タブを使います。複雑なプロジェクトの場合は Option ボタンでソース参照パスの設定等を行う事が出来ますが、ここで説明している ledtest では特に設定は必要ありません。

ScreenShot

Target にはデバッグに利用するArmadilloのIPアドレスを入力します。ここでは 192.168.16.209 です。Program にデバッグするモジュール(ledtest)を選択します。ファイル参照ボタンをクリックします。

ScreenShot

Browse OS-9 Modules ダイアログで デバッグするモジュール(ledtest)を選択します。

ScreenShot

ledtest はコマンドパラメタも環境変数も使いませんので、Parameters や Target Environment Variables は空欄のままにします。OKをクリックするとターゲットボードと通信をして、デバッグが開始されます。

ScreenShot

デバッグが開始されると、デバッグ用のツールチップが表示され、ソースコードのmain関数にカーソルが表示されて待機状態になります。

ScreenShot

ツールチップは移動する事が出来ます。使いやすい位置へ移動して下さい(ドッキングも可能です)。

ScreenShot

ソースコードの左側のグレーの部分をクリックすると、ブレークポイントの設定/解除が出来ます。ここでは _os_open() 直後の if文にブレークポイントを設定してみます。

ScreenShot

デバッグツールの実行ボタンをクリックすると、ブレークポイントまでプログラムが実行され、カーソルが移動します。

ScreenShot

ローカルウォッチでローカル変数の値を確認する事が出来ます。ここでは err の値が 0、つまり_os_open()が成功した事が確認出来ます。

ScreenShot

デバッグツールチップでステップ実行ボタンをクリックしてみます。ステップ実行では、ボタンをクリックする度にカーソルが1ステップずつ進みます(for文のように1つの文で数ステップになる場合もあります)。

ScreenShot

_os_write()のところで一度、ターゲットボードのLEDが消灯しているのを確認します。

ScreenShot

ステップ実行で_os_write()を実行すると、LEDが点灯する筈です。何周か実行してみて下さい。

ScreenShot

ある程度進んだところで再び実行ボタンを押してみます。

ScreenShot

プログラムの終了までブレークポイントが無いのでそのままプログラムが終了します。プログラムが終了すると下記のようなダイアログが表示されます。

ScreenShot

デバッグツールのReforkボタンをクリックすると、再度プログラムの先頭から実行する事が出来ます。

ScreenShot

ScreenShot

Hawk Debugger を終了するには、Exit the Debugger ボタンをクリックします。

ScreenShot

確認のダイアログが表示されるので、OKをクリックすれば終了します。

ScreenShot

Hawkを終了するには、FileメニューからExitを選択して下さい。

ScreenShot

本Howto及びOS-9に関するお問合せはこちら

株式会社フォークス
TEL: 03-5603-2301
E-mail: atos9info@yaya.forks.co.jp
URL: http://www.forks.co.jp/