記事執筆の皆様、お疲れ様です。
12月17日担当の7of9(セブンオブナイン)です。
http://qiita.com/7of9/items/ecdac553a7d325f11870
においてデバッグ方法をいくつか挙げました。
その中のエミュレータについての補足記事とします。
エミュレータの定義
この記事ではエミュレータを以下のように定義します。
実機の動作(振る舞い)を模擬する
シミュレータとエミュレータなどの定義の仕方が違うかもしれませんが、この記事としては「エミュレータ」とします。
関連 http://d.hatena.ne.jp/itog/20110209/1297220706
エミュレータの必要性・利点
エミュレータが必要な理由(+利点)としては以下を挙げます。
- 実機が用意されていない場合
- 実機製作中など (仕様だけはある)
- 実機の設置場所と開発PCの場所が異なる
- 実機のサイズ、電源事情などにより開発PCの隣に置けない場合もある
- 毎回、設置場所に移動して動作確認は効率が悪い
- ノートPCに開発環境を入れて設置場所に赴けない場合もある
- 実機をそのまま使っても測定データが得られない場合
- 測定データを得るための環境条件の再現が難しい場合
- エミュレータなら「模擬測定データ」を出力できる
- 実機動作では時間がかかる、条件を成立しにくい場合
- エミュレータで条件成立を可能にする
- 実機では終了処理が厳密で、デバッグ試行回数に制約が出る場合
- エミュレータでは即座に終了し、再試行ができる
- 実機で起こしにくい「異常系」のデバッグをしたい場合
- 例: 通信遅延
- 例: 通信パケットのロス
エミュレータの欠点、考慮点
- エミュレータの作成時間がかかる
- エミュレータ自体のデバッグ作業が必要となる
- エミュレータの保守をどれくらい行うか
- 機能追加に追従する必要性の検討
- 主な処理だけとする考えも
- タイミングが実機と微妙に異なる
- シビアなタイミングのエミュレーションは難しい
- エミュレーション対象装置の理解が必要
- 公開情報と非公開情報
- 非公開情報を如何にして調べるか (自作ツールの利用など)
- エミュレーション対象装置の再現は難しい場合もある
- 関連: セガ「ナイツ」の移植の話
- 組込みではないですが、「エミュレータ」の話です
-
この「人工知能」様は最後の最後までバグをだしまくり、細かなオリジナルとの違いを高橋Dと奥成Pから指摘され続け、担当者は悪夢にまで見ながらこのチマチマした生き物の再現に力を尽くした。
- 関連: セガ「ナイツ」の移植の話
エミュレータの例
組込みプログラミング限定で考えた場合、以下のようなエミュレータを挙げてみます。
- UARTで応答するもの (*1)
- 取込み側とUARTでつながる
- 例: 複数基板間通信
- 例: 外付けセンサー(UART接続)
- 取込み側とUARTでつながる
- DA出力するもの (*2)
- 取込み側のAD端子につながる
- 例: ステップ状のアナログ値を出力するもの
- 例: 任意のアナログ値を環境条件に基づき出力するもの
- 特定のシーケンスでGPIOをON,OFFするもの (*2)
- 特定の条件でGPIOをON,OFFするもの (*2)
- 例: レベルセンサー
- 例: proximity センサー
- 例: 人感検知センサー
(*1): PCソフトで再現するのが簡単。CPU基板で再現することも可能。
(*2): PCソフトで再現するにはPCI接続のボード(例:GPIOボード)が必要となり、数万円くらいします。こういう場合は、PCソフトでのエミュレーションではなく、Raspberry PiやArduinoで再現というのも一つの方法です。
エミュレータを作る/作らない?
以下を検討します。
- そのエミュレータを今後どれくらい使うか
- 1つのエミュレータから分岐して、別のエミュレータにできるか
- 作った機能の再利用
- 新規エミュレータ作成時間の短縮
- エミュレータの機能を実際に使う場合
- 計算処理を共通化してエミュレータと実基板の両方で使う場合
- エミュレータを作ることで得られることはあるか
- 例: エミュレーション対象装置の理解
まとめ
プロジェクトごとにエミュレータの利点と欠点を考慮して、必要であればエミュレータを作りましょう。
注意事項としては「エミュレータがあれば実機は不要、ではない」ということです。
エミュレータを使ってある程度の開発はしながら、まとまった段階で実機動作検証は必要です。