GAIO CLUB

2004年04月04日

 シミュレータを利用して実機では再現が困難な例外条件を再現テストする

GAIO CLUB 特集
GAIO CLUB【2004/4月号】
シミュレータを利用して実機では再現が困難な例外条件を再現テストする
システムシミュレータで多重割り込みを再現する手法

多くの不具合につながる実機では再現が困難な例外条件

現在行われているソフトウエア評価の方法のほとんどは、いわゆる「実機デバッグ」です。ソフトを実装した試作製品を前に、実際に操作を行いながら正しく動作することを確認すると言うものです。

しかしながら、製品の機能そのものがハードウエアでなく、ソフトウエアで実装されるようになった今日では、システムはますます複雑となっており、「実機デバッグ」だけで、起こり得る全ての条件の組み合わせに対するテストを行うことは、もはや不可能になっています。

ソフトウエアの不具合は、正常系の機能ではなく、例外条件下や、多重された複雑な条件下で起こるものが多いと言われています。これらは、「実機」を使ったデバッグでは、例外的な条件を再現できないことに起因しています。

シミュレータを使った例外条件発生装置

組み込み開発向けの「シミュレータ」は、実機では再現が難しい例外条件を容易に発生させる装置として、多くの方が注目しています。シミュレータとは、マイコンや周辺デバイスなどのハードウエアを、すべて仮想的なソフトウエアに置き換え、PC上で実行する環境のことです。

通常のシミュレータのGUIは、「ソースコードデバッガ」となっています。このシミュレータに、Windows上のモジュールとして作成・実装した仮想的な「例外条件発生装置」を接続することで、例外条件に対するテスト環境ができあがります。

ガイオ「システムシミュレータ」での多重割り込みテスト

では、ガイオの「システムシミュレータ」を使用して、実機では再現が難しい多重割り込みテストの例についてご紹介いたします。 ここでは、マイコンシミュレータのMPUモデルとして「ARMコア」を、割り込み制御にはARMコアが持つ2つの割り込み入力、「IRQ」と「FIQ」を使用します。FIQはIRQよりも優先度が高く設定されています。

マイコン側のサンプルコードは以下のようにしてあります。メイン関数main()には永久ループが設定されており、割り込み待ち状態になっています。割り込みハンドラには、IRQとFIQ用に各々「IRQ_HANDLER1()」と「IRQ_HANDLER2()」が作成されており、これらのハンドラの中には、割り込み処理の代用としてi/oポート「MEM_RESULT」にカウントアップした値を書き込むforループが設定されています。
多重割り込みテスト装置の概要図
ガイオ「システムシミュレータ」での多重割り込みテスト

多重割り込み発生装置

多重割り込みを発生させるモジュールは、マイコンシミュレータとは別のモジュールとして作成します。このモジュールは「Visual Studio .NET」を使用して、Windowsのdll(ダイナミックリンクライブラリ)として作成し、マイコンシミュレータに接続されます。
  • ここでの例では、CSV形式のファイルに割り込み発生のシーケンスを記述し、これを多重割り込み発生装置が読み込んで、記述されたタイミングでマイコンシミュレータに割り込みを発生させる仕組みにしています。 割り込みシーケンスのデータには、[割り込み発生時刻(クロック)]、[割り込み種別]と、2つの付随データ(今回は未使用)をCSV形式で記述しています。
  • 割り込み発生タイミングデータ
割り込みを発生する装置のソースは下図のようになります。Create()関数は、テスト装置のクラスが作成されたときにコールされる関数で、この中でCSVファイルを読み込み、シーケンスデータの配列m_seq_data[] にデータを準備しています。 右下のAlwaysClock()関数は、マイコンのマスタークロック1クロックに相当するハードウエアの処理を定義する関数です。ここでは、マスタークロックm_clockと発生タイミングを示すm_seq_data のメンバー clock_count を比較して、指定された時間に割り込みを発生させる関数 No-tify()をコールするようになっています。

この仮想テスト装置は、ガイオの仮想ハード作成用SDKである「IFビルダー」によって、「.NET」環境でdllモジュールにコンパイルされ、このdllがシミュレータからリンクされるような仕組みになっています。
仮想テスト装置 ソースコード:CSVの割り込み発生タイミングデータを読み込みデータ配列に準備する
仮想テスト装置 ソースコード:発生タイミングデータ配列に従ってシミュレータへ割り込みイベントを発生する

多重割り込み実行の様子

では、このテスト環境を実行してみます。下図の「波形ビュー」は、i/oポートや割り込みタイミングを波形上でモニターするためのもので、前述の「IFビルダー」が標準のモニタとして自動作成します。 出力波形とCSVの割り込みシーケンスを比較してみて下さい。
多重割り込み実行の様子
実行の順番は下図のようになります。
多重割り込みテストの実行順序
このように、CSVファイルに記述されたタイミングで、正しく多重割り込みが再現できていることが、おわかり頂けると思います。この仕組みを実際の組み込みソフトに適用することで、実機では再現が難しい複雑なタイミングのイベントを、自由に起こしてソフトの評価を行うことができるのです。

人気のコラム

最新のコラム