【実施例1】
【0024】
図1は、本発明の第一の実施例になる組込みシステムのシミュレーション装置の全体的な構成例を概説する機能ブロック図である。本発明のシミュレーション装置は、組込みシステムのシミュレーションが、その構成要素の不具合によって停止状態に入った場合に、ユーザがその停止状態を回避するための命令列(以降デバッグシーケンスと呼称)を構築して、シミュレーション内部に反映させることを可能にする計算機システムである。
【0025】
本計算機システムにはシミュレーション対象モデル106が搭載され、さらにこのシミュレーション対象モデル106中に搭載されたデバッグ情報インポーザ101と、外部のユーザインターフェイス部100とを備えている。
【0026】
デバッグ情報インポーザ101は、シミュレーション対象モデルに異常が発生した場合に、その異常を解決する命令列をシミュレーション対象モデル106において実行する機能を有している。
【0027】
ユーザインターフェイス部100は、ユーザが対話的な処理により、デバッグシーケンスの構築と、シミュレーション内部で実行されるソフトウェアの実行状況の確認を可能にする機能を有している。すなわち、ユーザインターフェイス部100は、通常のユーザインターフェイスとしての機能のほかに、デバッグ用ユーザインターフェイス部107を備えており、このインターフェイス部は、ソフト実行状況表示機能108、シーケンス構築機能109、及び、シーケンス送出機能110を有している。
【0028】
シミュレーション対象モデル106は、基本シミュレータ106Aと、デバッグ情報インポーザ101を有する拡張シミュレータ106Bとで構成される。基本シミュレータ106Aは、計算機システム(コンピュータ)により構成され、バスを介して接続された割込みコントローラ102、RAM 103、ROM 104、CPU 105、及び、システムモデル120を備えている。シミュレーション対象モデル、すなわちシステムモデル120のデータは、RAM 103のシミュレーション対象モデルデータ記憶部に保持される。
【0029】
ユーザインターフェイス部100とシミュレーション対象モデル106は、別個のソフトウェアとして動作することが可能であり、このソフトウェア間では各々が動作する計算機がサポートする通信規格を用いて、ソフトウェア実行状況及びデバッグシーケンスがやり取りされる。
【0030】
次に、本発明の適用対象となる、組込みシステム210の構成例を概説する。
一般に、組込みシステムは、機械部品207〜209、通信インターフェイス205、と制御マイコン200の組合せによって構成される。制御マイコン200の内部ではメモリバス204を中心として、CPU201があり、その上でソフトウェア202が動作する。また、割込みコントローラ203がCPU201と接続されており、周辺機器206が制御マイコン200の外部にある機械部品207〜209、及び、通信インターフェイス205と接続された構成となっている。ここでは、組込みシステム210の構成要素として自動車の制御システムを例にとると、機械部品207には、例えば、エンジン制御ユニット、起動、発電制御ユニット、車両の駆動機構制御ユニット、車体制御ユニット、その他の各種の制御ユニット(図示略)がある。各制御ユニットは、各々、ソフトウェア(コンピュータプログラム)を実行することで所定の機能が実現される複数のモジュールによって構成されている。また、これらのソフトウェアでは、エンジンや車両の各種の状態を検知する各種のセンサ208の出力、車両の操作状態を示すスイッチ類209の各イベントや状態などを示すデータが用いられる。これら、制御マイコン200の周辺機器206、すなわち機械部品207〜209、及び、通信インターフェイス205が、
図1のシステムモデル120に対応するものである。
【0031】
このような組込みシステム210が動作する際のデータの流れとしては、通信インターフェイス205または機械部品207〜209から周辺機器206がデータを受け取ると、割込みコントローラ203がCPU210上でのデータ処理を割込させ、処理された結果が、再度周辺機器206を通し、通信インターフェイス205または機械部品207〜209に指令される、という形をとる。
【0032】
従って、組込みシステム210の構成要素における不具合の存在は、ソフトウェア202がCPU201の外部からデータ入力を待つ状態で停止している状態として外部から観測される。
【0033】
本発明は、組込みシステム210の不具合が、ソフトウェアの実行の停滞に帰結される現象に着目して、それを回避する手段を提供し、組込みシステム210の実行継続を可能にすることで、組込システム210におけるユーザの不具合事象の把握を補助するものである。
【0034】
次に、
図3に、
図1のユーザインターフェイス部100における、ソフト実行状況表示部108の表示画面300の構成例を示す。ソフト実行状況表示部108は、ユーザに対しシミュレーションの実行状況を提示する機能を提供するものであり、ソフトの不具合の個所を抽出する機能、抽出された不具合に関してあらかじめデータベースに蓄積された情報からその回避条件、あるいはプログラムの継続条件などを抽出し、ユーザに提示する機能を有する。ソフト実行状況表示画面300には、ソフト実行状況表示部301と、ソフト実行状況キャプチャ開始ボタン302がある。
【0035】
すなわち、シミュレーション対象内のCPU201の動作トレース(CPUトレース)は、そのシミュレータの機能によって捕捉できるものとする。シミュレーション実行途中においてソフト実行状況キャプチャ開始ボタン302を押すことにより、その機能が有効となり(
図7のS700−2参照)、CPUトレースが採集される。そのCPUトレースを解析することにより、シミュレーション内部の無限ループ状態を検出する。検出方法としては、CPUトレースの内、プログラムカウンタ値の遷移記録をとり、短い期間で周期的な動作をしている箇所を抜き出す。
【0036】
この時抜出した、プログラムカウンタの範囲、動作周期、ループ条件となっている条件式が、ソフト実行状況表示部301に提示される。さらに、不具合の個所や、データベースに蓄積された情報に基づく不具合の回避条件、あるいはプログラムの継続条件などが表示される。
図3の例では、プログラムカウンタの範囲に、不具合のある特定の命令列の範囲が表示され、その動作周期が203μsec、であり、さらに、ループの脱出条件式も表示されている。
【0037】
次に、
図4は、ユーザインターフェイス部100のシーケンス構築部109の画面400の構成例を示す。
【0038】
ユーザは、提供された情報に基づき、この画面400を用いてデバッグシーケンスを構築し、そのデータはシミュレーション対象モデル106のメモリに記録される。すなわち、デバッグシーケンスは、シミュレーション対象中のRAM103に対する操作と言う形で表現される。
【0039】
よって、シーケンス構築部109の画面400は、編集対象シーケンスを選択するリスト401、編集中シーケンスを表示するシーケンス内操作リスト402、追加するコマンドーを選択するコマンドー選択リスト403を有している。シーケンス内操作リスト402により追加可能なコマンドーには、指定アドレスに対する、書込操作、読出し操作、指定時間のウェイト(待機)の3種が存在する。さらに、アドレス入力フィールド404は、操作対象となるアドレス値を指定するものであり、アクセス値入力フィールド405は、メモリ値を書き換える値を指定するものである。ユーザは、シーケンス追加ボタン406の操作により、コマンドー選択リスト403で選択した「コマンドー」と、アドレス入力フィールド404とアクセス値入力フィールド405で指定された「アドレス」及び「値」に関するメモリ操作を、編集対象であるシーケンス内操作リスト402に表示されたデバッグシーケンスに追加することができる。
【0040】
次に、
図5は、ユーザインターフェイス部100のシーケンス送出部110の画面500の構成例を示すものである。ユーザは、シーケンス構築部109で構築した、デバッグシーケンスの送出指示をこの画面500から行う。
【0041】
このため、シーケンス送出部109の画面500は、「送出対象デバッグシーケンス」を選択するシーケンス選択リスト501、選択されたデバッグシーケンスの「送出タイミング」を選択する送出タイミング選択リスト502、送出タイミング選択リスト502で時間指定オプションが選択された時その「送出時間」を指定するミュレーション時間入力フィールド503を備えている。画面500はさらに、シーケンス送出ボタン504を備えており、ユーザがこのシーケンス送出ボタン504を操作することにより、シーケンス選択リスト501と送出タイミング選択リスト502とシミュレーション時間入力フィールド503で指定された情報を用いて、実際にデバッグシーケンスの送出を行う。
【0042】
次に、
図6は、
図1におけるデバッグ情報インポーザ101の内部構成及び、シミュレーション対象モデル106との接続関係を示す図である。
【0043】
デバッグ情報インポーザ101は、シミュレーション対象モデル106中で動作する、割込み発生モデル及びバスマスタとして機能する。
【0044】
デバッグ情報インポーザ101のプロセス間通信I/F600は、プロセス間通信によってユーザインターフェイス部100と接続しており、ユーザインターフェイス部100より送出されるデバッグシーケンスと送出タイミング情報を受け取って解釈する機能を持つ。
【0045】
バスマスタモデル604は、シーケンス送出部110の画面500での操作を受けて、シミュレーション対象モデル106中へのデバッグシーケンスの注入及び、RAM104に対するメモリ操作を行う機能を有する。 割込み信号コントローラ603は、デバッグシーケンスの実行をCPU105に行わせるためのトリガをかける機能を有する。
異常状態抽出部601は、ユーザインターフェイス部100のソフト実行状況表示部108で表示するための、シミュレーション実行状態におけるプログラム(ソフトウェア)実行の継続性に不具合を来す異常状態の情報を抽出し、生成する機能を有する。異常状態としては、無限ループ、変数値異常、RAM値の異常、CPUの動作範囲の異常、などが挙げられる。
デバッグシーケンス実行部602は、プロセス間通信I/F600が受け取ったデバッグシーケンスに従い、デバッグ操作をCPU105に実行させるための操作を、割込み信号コントローラ603及び、バスマスタモデル604を用いて行う機能を有する。
【0046】
次に、
図7を用いて、本実施例による、組込みシステムのシミュレーションの動作フローを概説する。
図7は、横軸に、ユーザ、ユーザI/F、拡張シミュレータ、基本シミュレータを示し、縦軸に全体の処理の流れを示している。
【0047】
まず、ユーザはシミュレーションを開始する。この時、デバッグ情報インポーザ101の初期化が行われ、ユーザインターフェイス部からの接続待ちが行われる(ステップ700、ステップ701、ステップ711)。
【0048】
次に、ユーザは、ユーザインターフェイス部100のソフト実行状況表示部の画面300のソフト実行状況キャプチャ開始ボタン302を押して、シミュレーションの実行状態キャプチャの開始を指示する。これによってデバッグ情報インポーザ101中の異常状態抽出部の機能が有効化される (ステップ700−2、ステップ702−1)。
【0049】
これによって、ユーザインターフェイス部100の画面300のソフト実行状況表示部301に、異常状態、例えば無限ループ状態の有無、そのループのプログラムカウンタ範囲、ループ周期、ループ脱出の条件式が表示される (ステップ702−2)。
【0050】
この情報を元に、ユーザはユーザインターフェイス部100のシーケンス構築画面400で、異常状態を解消するためのデバッグシーケンスを構築する (ステップ703−1、ステップ703−2)。 同時に、ユーザインターフェイス部100のシーケンス送出画面500で、構築したデバッグシーケンスの送出タイミングを指定し、ユーザインターフェイス部100のシーケンス送出画面500のシーケンス送出ボタン504を押して、送出の指示をする(ステップ704) 。
【0051】
デバッグシーケンスの送出が指示されると、ユーザインターフェイス部100内部では、シーケンスに含まれるコマンドーをシミュレーション対象モデル106中のCPU105のアーキテクチャのバイナリ列へと変換する (ステップ705) 。 さらに、変換されたバイナリ列と、ステップ704で指定された送出タイミングとをセットとしたデバッグシーケンスを、プロセス間通信I/F600を通して、拡張シミュレータのデバッグ情報インポーザ101に送出する (ステップ706) 。
【0052】
送出されたデバッグシーケンスは、デバッグ情報インポーザ101のプロセス間通信インターフェイス600で受信され、命令が解釈される(ステップ707)。 この時、デバッグシーケンス中のバイナリ列部分と送出タイミングが分割される。
【0053】
次に、デバッグシーケンス中のバイナリ列がデバッグ情報インポーザ101のバスマスタモデル604を通して、シミュレーション対象モデル106の基本シミュレータ106AのRAM103上の、予め指定された未使用領域へコピーされる (ステップ708) 。
デバッグシーケンス中の送出タイミングに記載される時間までデバッグシーケンスの実行は一時停止され、デバッグシーケンス実行部602で待機する(ステップ709)。なお、デバッグシーケンスの送出タイミングが即時であった場合、送出から待機を経ること無く実行される。
【0054】
デバッグシーケンスの送出タイミングにシミュレーションが到達すると、デバッグシーケンス実行部602によってデバッグシーケンスの実行が再開される。 この時、デバッグ情報インポーザ101の割込み信号コントローラ603を通し、シミュレーション対象モデル106中のCPU105に対して割り込みを発生させる(ステップ710) 。なお、割り込みのない状態では、基本シミュレータ106AはそのCPU105で動作するソフトウェア202を実行している(ステップ712)。ソフトウェア202には、この割込み専用の割込みベクタが割当てられている。割り込みを受けて、ソフトウェア202はこの割込みベクタから、デバッグ操作注入専用の割込みハンドラに対してジャンプする。この割込みハンドラには、前述のステップ708でコピーされたバイナリ列の先頭へのジャンプ命令のみが記述されている。(ステップ713) するとCPU105の処理は、注入されたバイナリ列の実行へと遷移し、デバッグシーケンスを実行する。すなわち、ループ条件式を格納する変数のメモリ上での値が更新される(ステップ714)。
【0055】
そして、この割込みから退避すると、ソフトウェア202の実行が継続される (ステップ715) 。この時、デバッグシーケンスの実行によりループ条件が解除されているため、ソフトウェアの実行継続が可能な状態になる (ステップ716) 。
【0056】
このようにして、ソフトウェア202はその異常が解消され、シミュレーションが継続される。変数値異常、RAM値の異常、CPUの動作範囲の異常、などその他の異常の場合も、同様に、ユーザがソフト実行状況表示部301の情報を基に、異常状態解消のデバッグシーケンスを構築し、このデバッグシーケンス実行する。
【0057】
図8に、本発明におけるデバッグプロセスの概念を示す。ここでは、ステップ10、ステップ11、ステップ13〜ステップ15を実行する処理Aと、それに続く処理Bがあり、処理Aのループ条件に不具合がある場合を想定する。本発明では、ソフトウェアの実行を継続させるために、異常状態にあるソフトウェア、例えば無限にループするソフトウェアに対して、そのループ条件を上書きする命令列をステップ12として割り込ませ、ループ条件が格納されたメモリアドレスの値を書き換える。
【0058】
なお、この命令列を予めソフトウェアに組込む事は、割り込ませる命令列の柔軟性とROM使用量の観点から、コストが大きい。そこで、適切な命令列を都度メモリ上に読出し、ソフトウェアにはそのメモリ空間の先頭領域へのジャンプ命令のみを配置する方法を採用する。この場合、シミュレーション対象モデルに、特定の割込み要因に対応する特定アドレスに対するジャンプ命令のみで構成された割り込みハンドラを組込むだけで、利用可能となる(
図7のステップ713、714)。
【0059】
次に、
図9を用いて、本発明によるデバッグプロセスの変化を、
図11と比較して概説する。
【0060】
ユーザがシミュレーションを開始し(ステップ900)、そして不具合Aによって、シミュレーションが無限ループに陥る(ステップ901)までは、本発明も従来例と同様である。
【0061】
次に、ユーザが不具合Aに対応するデバッグシーケンスを構築し注入する(ステップ902)。この時シミュレーションは停止せずそのまま実行が継続される(ステップ903)。次に、不具合Bによってシミュレーションが無限ループに陥った場合も(ステップ904)、同様に不具合Bに対応するデバッグシーケンスを構築して、注入することにより(ステップ905)、シミュレーションの実行継続が可能になる。(ステップ906)。このようにシミュレーションの終了と再実行をすることなく、シミュレーションの終了まで実行可能になる(ステップ907)。
【0062】
これによって、1回のシミュレーションが終了したときには、修正するべき不具合が網羅可能となり、後にまとめて、デバッグ用ユーザインターフェイス部107にデータを表示し(ステップ908)、このデータを基にユーザが必要な箇所の回避策を実装可能となる (ステップ910) 。
【0063】
本発明によるデバッグプロセスを、自動車の制御システムの組込みシステムに適用した場合の、デバッグシーケンスの一例を
図10に示す。ここでは、ステップ10〜ステップ15からなる処理Aにおいて、そのステップ11が、センサ2のデータを入手して演算する処理を含むものであり、センサ2が未実装のためその出力が得られないで無限ループになっていると仮定する。この場合には、デバッグプロセスにより、センサ2の出力として分岐条件を満たす値、例えば12Vとしてループ条件を上書きする命令列をステップ120として割り込ませ、ループ条件が格納されたメモリアドレスの値を書き換える。これにより、センサ2が未実装のままでシミュレーションの処理Aを実行してさらに処理Bに進む、実行継続が可能になる。
【0064】
ステップ11の不具合がシミュレーション対象の構成部品、例えば機械系の一部品が未実装であった場合には、その部品に関する情報、ソフトウェアの一部の関数が未実装であった場合にはその関数に関する情報を、夫々書き換えることにより、シミュレーションの処理Aを実行してさらに処理Bに進む、シミュレーションの実行継続が可能になる。
【0065】
このように、本実施例によれば、ユーザに対し、シミュレーション対象モデルの外部からその実行継続条件を注入可能とする機能を提供することにより、ユーザがシステム挙動の把握及び回避策の実装を容易に行う事が可能である。
【0066】
また、本実施例によれば、専用デバッグ回路を有しないプロセッサを含むいかなる組込みシステムにおいても、ソフトウェアの構成に影響を与えること無く、上記のシミュレーションの実行継続を可能にしている。
【0067】
なお、上記組込みシステム210は、自動車の制御システムに限定されるものではなく、例えば、テレビ、ハードディスクコントローラ等、その他、種々のシステムに適用可能であることは言うまでもない。