JP5425445B2 - 処理制御システム、方法及びプログラム - Google Patents

処理制御システム、方法及びプログラム Download PDF

Info

Publication number
JP5425445B2
JP5425445B2 JP2008287111A JP2008287111A JP5425445B2 JP 5425445 B2 JP5425445 B2 JP 5425445B2 JP 2008287111 A JP2008287111 A JP 2008287111A JP 2008287111 A JP2008287111 A JP 2008287111A JP 5425445 B2 JP5425445 B2 JP 5425445B2
Authority
JP
Japan
Prior art keywords
program
external interrupt
loop
processing
interrupt processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008287111A
Other languages
English (en)
Other versions
JP2010113619A (ja
Inventor
正樹 片岡
秀昭 小松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008287111A priority Critical patent/JP5425445B2/ja
Publication of JP2010113619A publication Critical patent/JP2010113619A/ja
Application granted granted Critical
Publication of JP5425445B2 publication Critical patent/JP5425445B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

この発明は、組込みシステムなどのシステムの上で動くプログラムをシミュレーションするためのシステム、方法及びプログラムに関するものである。
近年、携帯電話、デジカメ、エレベータ、自動車のECU、エンジン・シミュレータ、産業用ロボットなど、マイクロコンピュータによってハードウェアを直接制御する組込みシステムが日常的に使用される頻度が高まってきた。
一般的なコンピュータ・プログラムもそうあるが、特に組込みシステムでは、作成したプログラムが、正しく動作するかどうかを、さまさざまな状況毎にテストする必要がある。
このようなテストにために従来行われている技法として、HILS(Hardware In the Loop Simulation)がある。特に、自動車全体の電子制御システムをテストする環境は、フルビークルHILSと呼ばれる。フルビークルHILSにおいては、実験室内で、本物のECUが、エンジン、トランスミッション機構などをエミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ECUからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。
しかし、HILSは、専用のハードウェア装置を使い、それと本物のECUの間を物理的に配線しなくてはならないので、準備が大変である。また、別のECUに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のECUを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、HILSのエミュレーション用のハードウェア装置は、一般に、非常に高価である。
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、全てをソフトウェアで構成する手法が提案されている。この手法は、SILS(Software In the Loop Simulation)と呼ばれ、電子制御システムに使用されるマイクロコンピュータ、入出力回路、制御のシナリオなどを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、組込みシステムのハードウェアが存在しなくても、テストを実行可能である。
SILSにおいては、ハードウェアの制御をエミュレートするプログラムや、ハードウェアの動作そのものの挙動をシミュレートするプログラムが、テスト用のコンピュータ・システム上で動作するように用意される。
特に、シミュレーションにかかる時間を短縮するために、テスト用のコンピュータ・システムとしては、近年、マルチプロセッサの高速なコンピュータ・システムが使用されるようになってきている。このようなシステムにおいては、シミュレーション・プログラムの動作を高速化するために、シミュレーションの複数の処理が、個別のプロセスや個別のスレッドとして、並列的に実行される。
ところで、実際の組込みシステムのプログラムは、ハードウェアを制御するために外部割込みを利用するものが多い。すると、割込みがあったことに応答して、直ちに処理を開始しなくてはならないので、外部割込みの待ち状態が無限ループで表現されていることが多い。それは、組込みシステムのプログラムでは、割込みに対する応答にリアルタイム性が重視され、スタンバイやスリープで割り込み待ちしないのは、そこからの復帰に時間がかかってしまうからである。
このような組込みシステムのプログラムを、ソフトウェア的にシミュレーションする場合、もとのプログラムのロジックをなるべく正確に実現するために、無限ループは、そのまま無限ループとして実行されることになる。その際、シミュレーション・プログラムでは、ハードウェアの外部割込みを実際に引き起こすことができないので、そこのところは、外部割込みをチェックする処理と、割込みがあったと判定されたときに行われる外部割込みをシミュレートする処理に置き換えられる。
ところが、ソフトウェアでシミュレーションする際に、無限ループ内で外部割込みをチェックする処理を行うと、短い時間の間に外部割込みをチェックするメモリ・アクセスが頻繁に行われ、そのことがバス・リソースを奪うため、並列動作中の別プロセッサの円滑な動作を阻害する、という問題がある。
特開2003−186936号公報は、シミュレーション制御部の制御によって、I/Oモデル部が動作した後の所定タイミング(アドレス値)で、CPUモデル部をモデル動作設定部が待機状態に設定してシミュレーションを省略し、次に、I/Oモデル部からの割り込みを含むイベント通知をモデル動作設定部が認識した後にCPUモデル部をモデル動作設定部によって動作状態に戻してシミュレーションを再開することを開示する。このようにして、CPUモデル部が、I/Oモデル部からの割り込みの待機状態において、処理上で意味のないループを処理している場合に、CPUモデル部のシミュレーションを省略するようにされる。
特開2003−186936号公報
特開2003−186936号公報が開示する技術においては、I/Oモデル部からの割り込みの待機状態において、処理上で意味のないループを処理している場合に、CPUモデル部のシミュレーションが省略され、それによって動作検証シミュレーションが高速化されるが、この技法においては、依然として、処理がループを廻りながら、CPUモデル部が動作中かどうかの判断処理が継続的に行われるので、依然として、バス・リソースの占有の問題は、残る。
従って、この発明の目的は、無限ループ中に外部割込みの処理を含むプログラムが、バス・リソースを過度に消費してしまう問題を解決することにある。
この発明によればまず、シミュレーション・プログラムが、ソースコード・レベルで、本発明の解析処理プログラムによって解析される。もし、バイナリ・コードしか入手できないなら、ソースコード・レベルを生成するために、必要に応じて、逆アセンブルまたは、逆コンパイル処理が行われる。
ソースコードの解析は、無限ループを見つけ出すことと、外部割込み以外にその無限ループから脱出するコードがあるかどうか、更には、ループの外部に対して副作用をもつ命令があるかどうかを確認することである。ここで、外部割込み以外にその無限ループから脱出するコードとは例えば、C言語を例にとると、while () { }ループの中のbreak;や、goto LABEL;などのことである。また、ループの外部に対して副作用をもつ命令とは、エラーを起こし得る可能性がある命令(不正なメモリアクセス、0による除算など)、他スレッドと同期をとる命令などのことである。すなわち、これらの命令の場合、ループから一旦出ると、ループ内に戻ってこれる保証がない。一方、外部割込みの場合、RTI(return from interrupt)という仕組みで、ループ内に戻ることができる。
無限ループがなく、あるいは無限ループがあっても、外部割込み以外にその無限ループから脱出するコードまたは、ループの外部に対して副作用をもつ命令があれば、本発明の処理プログラムは、何もしない。
もし無限ループがあり且つ、外部割込み以外にその無限ループから脱出するコードも、ループの外部に対して副作用をもつ命令もなければ、処理プログラムは、無限ループ中の、外部割込みを行う箇所の戻り番地をマップに追加する。このマップとは、好適には、共有メモリ領域に配置される。
このように処理プログラムにより前処理が行われると、シミュレーション・プログラムがコンピュータ・システム上で動作して、その無限ループに差し掛かり、無限ループ中の外部割込み処理のコードに到達すると、シミュレーション・プログラムは、外部割込み処理を行う。すると、本発明の実行チェック・プログラムが、その外部割込み処理の戻り番地が、マップにあるかどうかをチェックし、もしあれば、そのシミュレーション・プログラムのスレッドを停止する。そして、処理は、管理スレッドへと引き渡される。このようにシミュレーション・プログラムのスレッドが停止されることで、無限ループ内で繰り返し頻繁に外部割込みのためメモリにアクセスすることが防止され、これによって、CPUの負荷が軽減される。
その間、管理スレッドは、外部割込みがあったかどうかをチェックし、もし外部割込みがあると、外部割込みフラグをセットして、シミュレーション・プログラムのスレッドを再開する。すると、シミュレーション・プログラムは、その外部割込みをチェックする外部割込み処理を呼び出す次のコードに、RTI(return from interrupt)復帰する。
この発明によれば、無限ループ中の、外部割込み処理の戻り番地をマップに追加し、シミュレーション・プログラムの実行時に、処理プログラムが、外部割込み処理の戻り番地がマップに存在しているかどうかを確認し、もしそうなら、シミュレーション・スレッドを停止するようにしたので、割込みチェック処理によるメモリへの頻繁なアクセスが回避され、CPUの負荷が軽減される、という効果が得られる。このことは、シミュレーション・プログラム全体の速度向上につながる。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
先ず、図1を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図1において、ホスト・バス102には、複数のCPU0 104a、CPU1 104b、CPU2 104c、CPU3 104dが接続されている。ホスト・バス102にはさらに、CPU0 104a、CPU1 104b、CPU2 104c、CPU3 104dがプログラムをロードしたり作業領域を確保したりするためのメイン・メモリ106が接続されている。
一方、I/Oバス108には、キーボード110、マウス112、ディスプレイ114及びハードティスク・ドライブ116が接続されている。I/Oバス108は、I/Oブリッジ118を介して、ホスト・バス102に接続されている。キーボード110及びマウス112は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ114は、必要に応じて、後述する本発明に係るプログラムをGUIで操作するためのメニューを表示するために使用される。
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、IBM(R)System Xがある。その際、CPU0 104a、CPU1 104b、CPU2 104c、CPU3 104dは、例えば、インテル(R)Core 2 DUOであり、オペレーティング・システムは、Windows(商標)Server 2003である。オペレーティング・システムは、ハードティスク・ドライブ116に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ116からメイン・メモリ106に読み込まれる。
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、IBM(R)System Xに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Windows(R)に限定されず、Linux(R)、Mac OS(R)など、任意のオペレーティング・システムを使用することができる。POWER(商標)6ベースで、オペレーティング・システムがAIX(商標)のIBM(R)System Pなどのコンピュータ・システムを使用してもよい。
本発明の処理を実施するために、マルチプロセッサであることは必須ではなく、単一プロセッサのシステムであってもよいが、オペレーティング・システムが、マルチタスクまたはマルチスレッド対応である必要はある。
ハードディスク・ドライブ116にはさらに、特に図示しないが、逆アセンブリまたは逆コンパイラ・プログラム、後述する本発明に係る処理プログラム、及び本発明に係る処理プログラムが適用されるシミュレーション・プログラム等が格納され、キーボード110及びマウス112によって起動操作可能である。
図2は、本発明に係る処理プログラムのうち、シミュレーション・プログラムをソースコードのレベルで解析して、無限ループを検出し、検出されたループ内の、外部割込みを行う箇所の戻り番地をマップに登録する処理を行う部分の処理をフローチャートを示すものである。
図2の処理は、シミュレーション・プログラムのソースコードが入手可能であることを前提とした処理である。実行すべきシミュレーション・プログラムが、オブジェクトコードや実行可能なバイナリ形式でしか提供されていない場合には、一旦、ニーモニックからなるアセンブラ・ソースコードあるいは、Cなどの高級言語のソースコードに変更するために使用される。なお、逆アセンブリ・プログラムが利用する技術は、例えば、特開昭59−71546号公報などに記述されている。また、逆コンパイル・プログラムが利用する技術は、例えば、特開昭64−54537号公報、特開2005−85051号公報などに記述されている。本発明では、ごく一般的な逆アセンブリ・プログラムまたは、逆コンパイル・プログラムを使用することができ、そのための機能は、本発明にとって本質的ではないので、これ以上詳述しない。
ステップ202では、シミュレーション・プログラムのソースコードに対して、コンパイラの技術で確立されている、コントロール・フローの解析処理が行われる。この解析結果に基づき、以下の判断ステップに基づき処理が行われる。
すなわち、ステップ204では、バックエッジが存在するかどうかが判断される。バックエッジとは、プログラムの制御の流れを表したグラフに対する深さ優先探索において、深さが浅くなる方向を向いたエッジのことである。
もしバックエッジが存在するなら、ステップ206に進み、そこで、強連結成分が存在するかどうかが判断される。ここで強連結であるとは、コントロール・フローを有向グラフとみたとき、グラフ上の任意の2点間に有向路が存在することをいう。なお、コントロール・フローにおいて強連結成分を見出す技法については、例えば、本出願人に係る特開平9−319722号公報、及び特開2004−272826号公報などを参照されたい。
もし強連結成分が存在するなら、ステップ208に進む。ステップ208まで到達したということは、バックエッジが存在し、且つ強連結成分が存在する、ということで、コントロール・フローにループが検出されたことを意味する。
ステップ208では、見つかったループに関して、外部割込み以外に強連結成分から飛び出せるかどうかが判断される。ここで、外部割込み以外に強連結成分から飛び出せることとは、C言語における、while () { }ループの中のbreak;や、goto LABEL;が例である。それ以外に、エラーを起こし得る可能性がある命令(不正なメモリアクセス、0による除算など)、他スレッドと同期をとる命令がある場合も含まれる。これらを総称して、ループの外部に対して副作用をもつ命令と呼ぶこともできる。すなわち、これらの命令の場合、ループから一旦出ると、ループ内に戻ってこれる保証がない。一方、外部割込みの場合、RTI(return from interrupt)という仕組みで、ループ内に戻ることができる。
ステップ208で、見つかったループに関して、外部割込み以外に強連結成分から飛び出す命令がなく、ループの外部に対して副作用をもつコードもないと判断されると、ステップ210で、ループ内にある外部割込み処理の戻り番地が、マップに登録される。ここで、戻り番地とは、好適には、外部割込みのルーチンが配置されている次の命令の番地である。
コントロール・フローに複数のループが見つかった場合は、その各々のループについて、同様の判断と処理が行われることを理解されたい。
ここで、外部割込みを行う箇所の戻り番地について、説明を補足する。下記のような例において、#0x1000などは、プログラムがロードされるメモリのアドレスである。
#0x1000 label: infinite_loop
#0x1004 if interrupted
#0x1008 then call interrupt_handler /* 外部割込み処理呼び出し */
#0x100c jump infinite_loop
...
#0x2000 ... /* 外部割込み処理開始アドレス */
...
#0x2100 ret /* 呼び出し箇所の次のアドレスへリターン */
この例では、マップには、call interrupt_handlerが配置されたアドレスの次のアドレスである、#0x100cが登録される。ループ内に複数のcall interrupt_handlerがある場合は、その各々について、同様のアドレスの登録が行われる。図3にその様子を示す。すなわち、ソースコード302における外部割込み処理を行うコードが配置されたアドレスの次のアドレスが順次、マップ304に登録される。マップ304の領域は、好適には共有メモリとして、メイン・メモリ106内に確保される。
なお、シミュレーション・プログラムとしてバイナリ・コードしかない場合、それを単に逆コンパイルまたは逆アセンブルしてコードを眺めても、データ部分とプログラム部分を切り分けることが難しいことがある。そのため、場合によって、バイナリ・コードを逆コンパイルまたは逆アセンブルするために、エントリ・ポイントを明示的に指定する必要があるが、そのようなエントリ・ポイントは、プログラムの作者から入手するかまたは、インタプリタなどで実際に実行して検出する必要がある場合があることを理解されたい。
interrupt_handlerは、典型的には、後述する外部割込みフラグが立っていたら呼び出され外部割込みに応じた処理ルーチンへ飛び、そうでないならば呼び出されない関数である。interrupt_handler関数によって呼び出される処理ルーチンの具体例としては、エンジンのインジェクターが次回供給する燃料量の計算や、スパーク・プラグのスパーク・タイミングの計算などが挙げられる。原則的に、interrupt_handler関数は、ソフトウェア割込みというよりも、寧ろハードウェア割込みをシミュレートする関数である。
図4は、本発明の処理プログラムが、シミュレーション・スレッドの開始と停止、及びRTIライブラリの開始と終了に関する処理のフローチャートである。ステップ402から処理を開始する。
ステップ404では、パワーオン・リセット処理が行われる。パワーオン・リセット処理は、本発明に従う制御プログラムのメイン・メモリ106へのロード、シミュレーション・プログラムのメイン・メモリ106へのロード、図2のフローチャートの処理で得られた、ループ内にある外部割込みを行う箇所の戻り番地を、メイン・メモリ106中のマップ304に登録すること、RTIライブラリのセットアップ等を含む。
本発明に従う制御プログラムは、オペレーティング・システム上に常駐し、シミュレーション・プログラムの外部割込み処理からの戻りをフックし、あるいは、シミュレーション・プログラムを走らせるためのシミュレータの一部として組み込む方法などで、シミュレーション・プログラムを制御する。
なお、シミュレーション・プログラムは実際は様々な処理を行うが、以下では説明の便宜上、その無限ループ内での割込みチェック処理及び外部割込み処理から戻る処理に限定して処理を記述していることに留意されたい。
そのループ内の処理として、ステップ406では、無限ループ内にあって確実にシミュレーション時間が進められるように、シミュレーション時間の更新処理が行われる。
ステップ408では、割込みチェックが行われる。これは、図3に示すif interruptedの処理のことである。
ステップ410では、外部割込みフラグが立っているかどうかが判断される。もしそうでなければ、外部割込みは何もしないので、ステップ412の判断に進む。
ステップ412では、シミュレーション・スレッドが停止されたかどうかが判断される。もしそうなら、シミュレーション・プログラムは、ステップ414で、スレッドを停止して待機する。
ステップ412で、シミュレーション・スレッドが停止されていないと判断されると、シミュレーション時間の更新処理406に戻り、無限ループが継続される。
ステップ410に戻って、外部割込みフラグが立っていると判断されると、ステップ416で、interrupt_handlerによって、所定の割込み処理が行われ、ステップ418から、RTIライブラリが呼び出される。
RTIライブラリは、マップ304と同様に、本発明の処理プログラムの一部であり、以下その処理について説明する。ステップ420からRTIライブラリが開始され、RTIライブラリは、ステップ422で、外部割込み処理の戻り番地がマップ304に登録されているかどうかを判断する。
もし、外部割込み処理の戻り番地がマップ304に登録されていないなら、直ちにステップ424に行って、ループ内の外部割込み処理の次の命令に戻る。そしてステップ426で、RTIライブラリは、終了となり、ステップ412の判断に進む。
ステップ422で、外部割込み処理の戻り番地がマップ304に登録されていると判断されたなら、ステップ428では、タイマ割込みのみかどうかが判断される。もしそうなら、ステップ430で、次回のタイマ割込みの時間へシミュレーション時間を更新してから、ステップ424に行く。換言すると、タイマ割込みは、シミュレーション時間に関与するので、普通の外部割込みとは別扱いである。
ステップ428で、タイマ割込みのみでないと判断されると、ステップ432に行き、そこで、制御プログラムは、シミュレーション・スレッドを停止させる。この際、各種のパラメータなど、必要な値が所定のメモリ領域に退避される。
シミュレーション・スレッドを停止させると、処理は、ステップ434で管理スレッドに渡される。ステップ436で、管理スレッドは、シミュレーション時間を更新し、ステップ438で、外部割込みが起こったかどうかを判断する。そして、もしそうでなければ、ステップ434に戻って、ここで説明を省略するさまざまな管理的な処理を行う。
ステップ438で、管理スレッドによって外部割込みが起こったと判断されると、ステップ440で、外部割込みフラグへの反映が行われ、すなわち、その外部割込みに関する外部割込みフラグが立てられる。
ステップ442では、外部割込みフラグが立てられたこと関連して、ステップ432で停止されていたシミュレーション・スレッドが再開される。すなわち、ステップ446で、退避されていたパラメータなどが復帰され、停止した場所から、シミュレーション・スレッドが再開される。次に、ステップ424に進み、ループ内の外部割込み処理の次の命令に戻る。そしてステップ426で、RTIライブラリは、終了となり、ステップ412の判断に戻る。
図5は、図4のフローチャートにおける、シミュレーション・スレッドの停止処理を説明する概要図である。
図5において、パワーオン・リセット502の後、ステップ504で、ゲストすなわち、シミュレーションされるもともとのコードの命令列から実行時間を推測して、シミュレーション時間が更新される、という処理が行われる。これは、図4のステップ406の処理と同じである。
ステップ506で外部割込みフラグが立っていた場合、外部割込みチェック処理から、外部割込み処理508が呼び出される。そこまでは、従来の処理と同じだが、本発明によれば、外部割込み処理508に、RTI呼び出しのコード510が付加され、RTIライブラリ512が呼ばれる。このことは、図4では、ステップ420に対応する。
RTIライブラリ512は、外部割込み処理の戻り番地が、マップ304に登録されているかどうか確認し、もしそうなら、制御プログラムは、ステップ504及び506を含むループに関連する処理スレッドを停止する。そして、処理は、管理スレッド514に委ねられる。すると、この時点では、ステップ504が実行されず、すなわち、シミュレーション時間が更新されないので、管理スレッド514が代わりに、シミュレーション時間516を更新する。これは、図4のフローチャートでは、ステップ436に相当する。
図6は、図4のフローチャートにおける、シミュレーション・スレッドの再開処理を説明する概要図である。図6において、管理スレッド514は、外部割込みを監視している。そして、外部割込みが発生すると、管理スレッド514は、その外部割込みに対応する外部割込みフラグ602をセットし、RTIライブラリ512を呼び出す。RTIライブラリ512は、必要に応じてマップ304を参照し、停止されていたシミュレーション・スレッドの戻り番地を確認し、図示されているように、外部割込み506内にある外部割込み処理を呼び出した命令の次の命令に戻る。こうして、シミュレーション・スレッドが再開される。
図7は、図4のフローチャートにおける、タイマ割込み処理を説明する概要図である。図5で説明した場合と同様に、タイマ割込みの場合にも、外部割込み処理506から、RTIライブラリ512が呼び出される。しかし、図4のステップ428及び430から見て取れるように、タイマ割込み処理であると判別された場合は、シミュレーション・スレッドの停止処理432には行かず、ステップ430で、RTIライブラリ512が、図7に示す未来のタイマイベント702のエントリを参照して、次回のタイマ割込みの時間を取得し、その時間にシミュレーション時間を更新する。そしてRTIライブラリ512は、外部割込み処理506内にある外部割込み処理を呼び出した命令の次の命令に戻る。この場合、シミュレーション・スレッドは停止されていないので、処理はそのまま進行する。
以上、本発明は、組込みシステムのシミュレーション・プログラムに関する特定の実施例について説明してきたが、本発明はこの特定の実施例のみに限定されるものではなく、また特定のプログラミング言語や処理環境に拘わらず、制御ループの中に外部割込みを含む任意のプログラムの制御に適用可能であることを、この分野の当業者なら理解するであろう。
さらに、上記説明の処理では、スレッド単位で、停止及び再開をコントロールしているが、プロセス単位など、任意の処理単位での制御に、本発明を適用可能である。
本発明を実施するためのハードウェア構成の概要ブロック図である。 ループ内の外部割込み処理の戻り番地を確認する処理のフローチャートである。 ループ内の外部割込み処理の戻り番地を確認する処理を説明する概要図である。 シミュレーション・スレッドの停止及び再開処理のフローチャートである。 シミュレーション・スレッドの停止処理を説明するための概要図である。 シミュレーション・スレッドの再開処理を説明するための概要図である。 タイマ割込み処理を説明するための概要図である。
符号の説明
104a、104b、104c、104d・・・CPU
116・・・HDD
302・・・ソースコード
304・・・マップ
512・・・RTIライブラリ

Claims (17)

  1. コンピュータの処理によって、プログラムの動作を制御する方法であって、
    プログラムの制御フローのループを見出すステップと、
    前記ループに、外部割込み処理以外に前記ループから脱出するコード、または前記ループの外部に対して副作用をもつコードがないかどうかを確認し、外部割込み処理以外に前記ループから脱出するコードも、前記ループの外部に対して副作用をもつコードもないことに応答して、該外部割込み処理の戻り番地を登録するステップと、
    前記プログラムの実行時に、外部割込みフラグが立っているかどうかを判断するステップと、
    前記外部割込みフラグが立っているという判断に応答して割込み処理を実行し、該外部割込み処理の戻り番地が登録されているかどうか確認し、登録されていることに応答して、前記プログラムの実行処理を停止して、外部割込み処理が発生したかどうかを判断するステップと、
    前記外部割込み処理が発生したと判断されることに応答して、前記プログラムの実行処理を前記外部割込み処理の戻り番地から再開するステップを有する、
    制御方法。
  2. 前記プログラムの制御フローのループを見出すステップが、制御フローのバックエッジを見出すステップと、制御フローの強い連結成分を見出すステップを含む、請求項1の制御方法。
  3. 前記実行処理の単位がスレッドである、請求項1の制御方法。
  4. 前記プログラムが、シミュレーション・プログラムである、請求項1の制御方法。
  5. コンピュータの処理によって、プログラムの動作を制御する方法であって、
    プログラムの制御フローの、外部割込み処理以外にループから脱出するコードがなく、該ループの外部に対して副作用をもつコードもない前記ループにおける、該外部割込み処理の戻り番地を登録したテーブルを、前記コンピュータが読取り可能に用意するステップと、
    前記プログラムの実行時に、外部割込みフラグが立っていることに応答して割込み処理を実行し、該外部割込み処理の戻り番地が前記テーブルに登録されているかどうか確認し、登録されていることに応答して、前記プログラムの実行処理を停止して、外部割込み処理が発生したかどうかを判断するステップと、
    前記外部割込み処理が発生したと判断されることに応答して、前記プログラムの実行処理を前記外部割込み処理の戻り番地から再開するステップを有する、
    制御方法。
  6. 前記実行処理の単位がスレッドである、請求項5の制御方法。
  7. 前記プログラムが、シミュレーション・プログラムである、請求項5の制御方法。
  8. コンピュータの処理によって、プログラムの動作を制御するシステムであって、
    プログラムの制御フローの、外部割込み以外にループから脱出するコードがなく、また該ループの外部に対して副作用をもつコードももたない前記ループにおける、該外部割込み処理の戻り番地を登録したテーブルを、前記コンピュータが読取り可能に保持する手段と、
    前記プログラムの実行時に、外部割込みフラグが立っていることに応答して割込み処理を実行し、該外部割込み処理の戻り番地が前記テーブルに登録されているかどうか確認し、登録されていることに応答して、前記プログラムの実行処理を停止して、外部割込み処理が発生したかどうかを判断する手段と、
    前記外部割込み処理が発生したと判断されることに応答して、前記プログラムの実行処理を前記外部割込み処理の戻り番地から再開する手段を有する、
    制御システム。
  9. 前記実行処理の単位がスレッドである、請求項8の制御システム。
  10. 前記プログラムが、シミュレーション・プログラムである、請求項8の制御システム。
  11. プログラムの動作を制御する制御プログラムであって、
    コンピュータに、
    プログラムの制御フローのループを見出すステップと、
    前記ループに、外部割込み処理以外に前記ループから脱出するコード、または前記ループの外部に対して副作用をもつコードがないかどうかを確認し、外部割込み以外に前記ループから脱出するコードも、前記ループの外部に対して副作用をもつコードもないことに応答して、該外部割込み処理の戻り番地を登録するステップと、
    前記プログラムの実行時に、外部割込みフラグが立っていることに応答して割込み処理を実行し、該外部割込み処理の戻り番地が登録されているかどうか確認し、登録されていることに応答して、前記プログラムの実行処理を停止して、外部割込み処理が発生したかどうかを判断するステップと、
    前記外部割込み処理が発生したと判断されることに応答して、前記プログラムの実行処理を前記外部割込み処理の戻り番地から再開するステップを実行させる、
    制御プログラム。
  12. 前記プログラムの制御フローのループを見出すステップが、制御フローのバックエッジを見出すステップと、制御フローの強い連結成分を見出すステップを含む、請求項11の制御プログラム。
  13. 前記実行処理の単位がスレッドである、請求項11の制御プログラム。
  14. 前記プログラムが、シミュレーション・プログラムである、請求項11の制御プログラム。
  15. プログラムの動作を制御する制御プログラムであって、
    コンピュータに、
    プログラムの制御フローの、外部割込み処理以外にループから脱出するコードがなく、該ループの外部に対して副作用をもつコードもない前記ループにおける、該外部割込み処理の戻り番地を登録したテーブルを、前記コンピュータが読取り可能に用意するステップと、
    前記プログラムの実行時に、外部割込みフラグが立っていることに応答して割込み処理を実行し、該外部割込み処理の戻り番地が前記テーブルに登録されているかどうか確認し、登録されていることに応答して、前記プログラムの実行処理を停止して、外部割込み処理が発生したかどうかを判断するステップと、
    前記外部割込み処理が発生したと判断されることに応答して、前記プログラムの実行処理を前記外部割込み処理の戻り番地から再開するステップを実行させる、
    制御プログラム。
  16. 前記実行処理の単位がスレッドである、請求項15の制御プログラム。
  17. 前記プログラムが、シミュレーション・プログラムである、請求項15の制御プログラム。
JP2008287111A 2008-11-07 2008-11-07 処理制御システム、方法及びプログラム Expired - Fee Related JP5425445B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008287111A JP5425445B2 (ja) 2008-11-07 2008-11-07 処理制御システム、方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008287111A JP5425445B2 (ja) 2008-11-07 2008-11-07 処理制御システム、方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2010113619A JP2010113619A (ja) 2010-05-20
JP5425445B2 true JP5425445B2 (ja) 2014-02-26

Family

ID=42302117

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008287111A Expired - Fee Related JP5425445B2 (ja) 2008-11-07 2008-11-07 処理制御システム、方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5425445B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5542643B2 (ja) * 2010-12-10 2014-07-09 三菱電機株式会社 シミュレーション装置及びシミュレーションプログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003186936A (ja) * 2001-12-17 2003-07-04 Oki Data Corp 動作検証シミュレーションの実行方法及びシミュレーション実行装置並びにプログラム

Also Published As

Publication number Publication date
JP2010113619A (ja) 2010-05-20

Similar Documents

Publication Publication Date Title
JP4222370B2 (ja) デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム
US7383460B2 (en) Method and system for configuring a timer
TWI667588B (zh) 用以偵測未經授權之記憶體存取的計算裝置、方法及機器可讀儲存媒體(二)
JP5270330B2 (ja) マルチコアマイコンシステムのシミュレーション方法及びシミュレーション装置
Wang et al. Automatic detection, validation, and repair of race conditions in interrupt-driven embedded software
WO2018149495A1 (en) A method and system to fetch multicore instruction traces from a virtual platform emulator to a performance simulation model
US8689223B2 (en) Mechanisms to detect priority inversion
US8145471B2 (en) Non-destructive simulation of a failure in a virtualization environment
CN103713977B (zh) 一种微处理器ip核比较验证的实现方法
US20120278660A1 (en) Method and device for testing a system comprising at least a plurality of software units that can be executed simultaneously
JP5532144B2 (ja) プロセッサ、電子制御装置、作成プログラム
JP5452336B2 (ja) 周辺機器障害模擬システム、周辺機器障害模擬方法および周辺機器障害模擬プログラム
US11503005B2 (en) Tool verification system and method of verifying an unqualified component
US9880931B2 (en) Safepoints for guest languages on a virtual machine
JP5542643B2 (ja) シミュレーション装置及びシミュレーションプログラム
JP5425445B2 (ja) 処理制御システム、方法及びプログラム
US8701089B2 (en) Program execution device and method for controlling the same
Bate et al. Use of modern processors in safety-critical applications
US20040193394A1 (en) Method for CPU simulation using virtual machine extensions
Wang et al. Detecting data races in interrupt-driven programs based on static analysis and dynamic simulation
JP2828590B2 (ja) マイクロプログラム検証方法
Zhao et al. For Research Only
Döbel et al. Resource-aware replication on heterogeneous multicores: Challenges and opportunities
JP2018067057A (ja) 制御プログラムの検証装置及びプログラム
JP2002366378A (ja) プログラムのデバッグ装置及びデバッグ方法、並びに記憶媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110906

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130123

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130212

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130702

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130709

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131127

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees