(57)【要約】【課題】プログラム内の複数の処理の実行順序を監視することができる監視装置、コンピュータプログラム及び監視方法を提供する。【解決手段】実行部２１で監視対象プログラム３内のメモリアクセス処理が実行されると、メモリアクセス処理に関する監視位置情報が監視部２２へ通知される。ＩＤ特定部２２１は、監視テーブル４を用いて、実行部２１から順位通知された監視位置情報毎に、当該監視位置情報に対応する順序情報を順次特定する。メモリアクセス順序判定部２２２は、ＩＤ特定部２２１で特定した順序情報と一致する監視テーブル４内の順序情報に応じて、実行部２１で実行するメモリアクセス用Ｉ／Ｆの実行順序が所定の実行順序であるか否かを判定する。【選択図】図２０
2014026347.tif 000002
【特許請求の範囲】
【請求項１】
プログラム内の複数の処理を実行する実行部を備え、該実行部が実行する処理の順序を監視する監視装置において、
メモリのアクセスに関する複数の監視対象のアクセス処理の実行順序を定める順序情報と該監視対象のアクセス処理によるメモリアクセスに関する固有情報とを関連付けた監視テーブルを記憶する記憶部と、
前記実行部で複数のアクセス処理を順次実行した場合に、該アクセス処理によるメモリアクセスに関する固有情報を順次検出する検出手段と、
前記監視テーブルを用いて、前記検出手段で検出した固有情報に対応する順序情報を順次特定する特定手段と、
該特定手段で特定した順序情報に応じて前記実行部が実行する監視対象のアクセス処理の順序を監視する監視手段と
を備えることを特徴とする監視装置。
【請求項２】
前記検出手段で検出した固有情報に対応する順序情報が前記監視テーブルに存在するか否かを判定する判定手段を備え、
前記特定手段は、
前記判定手段が存在すると判定した順序情報を特定するようにしてあることを特徴とする請求項１に記載の監視装置。
【請求項３】
前記監視テーブルは、
前記順序情報により前記監視対象のアクセス処理の所定の実行順序を特定するようにしてあり、
前記監視手段は、
前記特定手段が特定した順序情報と一致する前記監視テーブル内の順序情報に応じて、前記実行部で実行する監視対象のアクセス処理の順序が前記所定の実行順序であるか否かを判定する順序判定手段を備えることを特徴とする請求項１又は請求項２に記載の監視装置。
【請求項４】
前記順序判定手段が前記実行部で実行する監視対象のアクセス処理の順序が前記所定の実行順序でないと判定した場合、所定のエラー処理を行うエラー処理手段を備えることを特徴とする請求項３に記載の監視装置。
【請求項５】
前記固有情報は、
前記監視対象のアクセス処理に対応する機械語のメモリアドレスを含むことを特徴とする請求項１乃至請求項４のいずれか１項に記載の監視装置。
【請求項６】
前記固有情報は、
メモリからの読み込み処理若しくはメモリへの書き込みの処理の種別、アクセスするメモリのアドレス又はメモリへの書き込み値に関する情報を含むことを特徴とする請求項１乃至請求項５のいずれか１項に記載の監視装置。
【請求項７】
コンピュータに、プログラムを構成する複数の処理を実行する実行部が実行する処理の順序を監視させるためのコンピュータプログラムにおいて、
コンピュータに、
前記実行部で複数のアクセス処理を順次実行した場合に、該アクセス処理によるメモリアクセスに関する固有情報を順次検出するステップと、
メモリのアクセスに関する複数の監視対象のアクセス処理の実行順序を定める順序情報と該監視対象のアクセス処理によるメモリアクセスに関する固有情報とを関連付けた監視テーブルを用いて、検出した固有情報に対応する順序情報を順次特定するステップと、
特定した順序情報に応じて前記実行部が実行する監視対象のアクセス処理の順序を監視するステップと
を実行させることを特徴とするコンピュータプログラム。
【請求項８】
プログラムを構成する複数の処理を実行する実行部を備え、該実行部が実行する処理の順序を監視する監視装置による監視方法において、
メモリのアクセスに関する複数の監視対象のアクセス処理の実行順序を定める順序情報と該監視対象のアクセス処理によるメモリアクセスに関する固有情報とを関連付けた監視テーブルを記憶しておくステップと、
前記実行部で複数のアクセス処理を順次実行した場合に、該アクセス処理によるメモリアクセスに関する固有情報を順次検出するステップと、
前記監視テーブルを用いて、検出された固有情報に対応する順序情報を順次特定するステップと、
特定された順序情報に応じて前記実行部が実行する監視対象のアクセス処理の順序を監視するステップと
を含むことを特徴とする監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム内の複数の処理を実行する実行部が実行する処理の順序を監視する監視装置、該監視装置を実現するためのコンピュータプログラム及び監視方法に関する。
【背景技術】
【０００２】
プログラムが組み込まれた組込機器又は組込システムにおいて、監視対象であるプログラム（モジュール）に監視コードを予め挿入しておくことにより、組込機器又は組込システム内で実行される処理の順序が正しいか否かを判定する監視機能が実現されている。
【０００３】
例えば、プログラムのソースコードから監視対象となるモジュールを検出する検出部、監視対象となるモジュールを識別する識別コードを定義したシーケンス監視テーブル、監視対象となるモジュールに対して監視用コードを生成する生成部、生成した監視用コードを各モジュールのソースコードに挿入して得られたソースコードを出力する出力部などを備えたシーケンス監視自動プログラミング装置が開示されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１５９１１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の装置にあっては、プログラムの各モジュールの実行順序（シーケンス）を監視することができる。このようなモジュールでは、メモリ領域にアクセスして、データの読出し及びデータの書込みなどの複数のメモリアクセス処理が実行される。また、このようなメモリアクセス処理は、複数のモジュールから呼び出すことができるメモリアクセス専用の外部関数が用いられている。
【０００６】
一般的にプログラムがメモリ領域にアクセスして処理を行う際には、必ず初期データの書込み処理を行ってからデータの読出し処理を行うように、同じモジュール内であっても、メモリアクセス処理の順序が定められており、メモリアクセス処理の順序には制約が存在する。
【０００７】
例えば、同じモジュール内において、特定の条件が成立した場合にのみメモリアクセスを実行することがある。このため、それぞれのモジュールが正しい順序で実行されている場合であっても、各モジュール内の処理について注目すると、各モジュール内のメモリアクセス処理が誤った順序で実行されてしまう場合もある。しかし、特許文献１の装置は、各モジュールの実行順序のみを監視するので、このようなメモリアクセス処理の順序までは監視することができない。
【０００８】
また、モジュール内に割込みの発生によって実行される割込み処理が存在する場合、同じモジュール内の複数個所で割込み処理が実行される可能性があり、また実行箇所はプログラムの実行中に決定される。そして、割込み処理からのメモリアクセスには、割込み前の通常の処理がメモリ領域にデータを一旦書込んだ後、割込み処理がメモリ領域のデータを読出す等のメモリアクセス順序の制約が存在する。このような場合においても、特許文献１の装置は、各モジュールの実行順序のみを監視するので、このような割込み処理の順序までは監視することができない。
【０００９】
本発明は、斯かる事情に鑑みてなされたものであり、プログラム内の複数の処理の実行順序を監視することができる監視装置、該監視装置を実現するためのコンピュータプログラム及び監視方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
第１発明に係る監視装置は、プログラム内の複数の処理を実行する実行部を備え、該実行部が実行する処理の順序を監視する監視装置において、メモリのアクセスに関する複数の監視対象のアクセス処理の実行順序を定める順序情報と該監視対象のアクセス処理によるメモリアクセスに関する固有情報とを関連付けた監視テーブルを記憶する記憶部と、前記実行部で複数のアクセス処理を順次実行した場合に、該アクセス処理によるメモリアクセスに関する固有情報を順次検出する検出手段と、前記監視テーブルを用いて、前記検出手段で検出した固有情報に対応する順序情報を順次特定する特定手段と、該特定手段で特定した順序情報に応じて前記実行部が実行する監視対象のアクセス処理の順序を監視する監視手段とを備えることを特徴とする。
【００１１】
第２発明に係る監視装置は、第１発明において、前記検出手段で検出した固有情報に対応する順序情報が前記監視テーブルに存在するか否かを判定する判定手段を備え、前記特定手段は、前記判定手段が存在すると判定した順序情報を特定するようにしてあることを特徴とする。
【００１２】
第３発明に係る監視装置は、第１発明又は第２発明において、前記監視テーブルは、前記順序情報により前記監視対象のアクセス処理の所定の実行順序を特定するようにしてあり、前記監視手段は、前記特定手段が特定した順序情報と一致する前記監視テーブル内の順序情報に応じて、前記実行部で実行する監視対象のアクセス処理の順序が前記所定の実行順序であるか否かを判定する順序判定手段を備えることを特徴とする。
【００１３】
第４発明に係る監視装置は、第３発明において、前記順序判定手段が前記実行部で実行する監視対象のアクセス処理の順序が前記所定の実行順序でないと判定した場合、所定のエラー処理を行うエラー処理手段を備えることを特徴とする。
【００１４】
第５発明に係る監視装置は、第１発明乃至第４発明のいずれか１つにおいて、前記固有情報は、前記監視対象のアクセス処理に対応する機械語のメモリアドレスを含むことを特徴とする。
【００１５】
第６発明に係る監視装置は、第１発明乃至第５発明のいずれか１つにおいて、前記固有情報は、メモリからの読み込み処理若しくはメモリへの書き込みの処理の種別、アクセスするメモリのアドレス又はメモリへの書き込み値に関する情報を含むことを特徴とする。
【００１６】
第７発明に係るコンピュータプログラムは、コンピュータに、プログラムを構成する複数の処理を実行する実行部が実行する処理の順序を監視させるためのコンピュータプログラムにおいて、コンピュータに、前記実行部で複数のアクセス処理を順次実行した場合に、該アクセス処理によるメモリアクセスに関する固有情報を順次検出するステップと、メモリのアクセスに関する複数の監視対象のアクセス処理の実行順序を定める順序情報と該監視対象のアクセス処理によるメモリアクセスに関する固有情報とを関連付けた監視テーブルを用いて、検出した固有情報に対応する順序情報を順次特定するステップと、特定した順序情報に応じて前記実行部が実行する監視対象のアクセス処理の順序を監視するステップとを実行させることを特徴とする。
【００１７】
第８発明に係る監視方法は、プログラムを構成する複数の処理を実行する実行部を備え、該実行部が実行する処理の順序を監視する監視装置による監視方法において、メモリのアクセスに関する複数の監視対象のアクセス処理の実行順序を定める順序情報と該監視対象のアクセス処理によるメモリアクセスに関する固有情報とを関連付けた監視テーブルを記憶しておくステップと、前記実行部で複数のアクセス処理を順次実行した場合に、該アクセス処理によるメモリアクセスに関する固有情報を順次検出するステップと、前記監視テーブルを用いて、検出された固有情報に対応する順序情報を順次特定するステップと、特定された順序情報に応じて前記実行部が実行する監視対象のアクセス処理の順序を監視するステップとを含むことを特徴とする。
【００１８】
第１発明、第７発明及び第８発明にあっては、メモリのアクセスに関する複数の監視対象のアクセス処理の実行順序を定める順序情報と監視対象のアクセス処理によるメモリアクセスに関する固有情報とを関連付けた監視テーブルを記憶部に記憶する。順序情報は、メモリアクセスの順序を特定することができる情報である。順序情報は、例えば、モジュール等の区別を示す系列、当該系列内でのアクセス処理の実行順序を示すＩＤなどの情報を含む。固有情報は、監視位置情報であり、例えば、メモリアクセスを実行するアクセス処理を呼び出す関数名、アクセスするメモリ領域（メモリのアドレス）、メモリアクセスの処理内容（読込み処理又は書込み処理の別）、メモリアクセスが書込み処理である場合の書込み値、同一関数において同一処理内容のアクセス処理の実行順番を識別する番号、アクセス処理に対応する命令コード（オブジェクトコード）のアドレスなどを含む。
【００１９】
検出手段は、実行部で複数のアクセス処理を順次実行した場合に、当該アクセス処理によるメモリアクセスに関する固有情報を順次検出する。固有情報の検出は、例えば、以下の方法で行うことができる。すなわち、メモリのアクセス処理が実行されたときに、その都度固有情報を取得して通知する監視用コードを、当該アクセス処理を行う対象コードに挿入しておく。
【００２０】
特定手段は、監視テーブルを用いて、検出した固有情報に対応する順序情報を順次特定する。順序情報は、前述のとおり、メモリアクセスの順序を特定することができる情報であり、例えば、モジュール等の区別を示す系列、当該系列内でのアクセス処理の実行順序を示すＩＤなどの情報を含むので、検出した固有情報に対応する順序情報を順次特定することにより、アクセス処理の実行順序を検出することができる。
【００２１】
監視手段は、特定した順序情報に応じて実行部が実行する監視対象のアクセス処理の順序を監視する。例えば、監視対象のアクセス処理の順序が予定順序のとおりであれば、正しい順序でアクセス処理が行われていると判定することができ、また、監視対象のアクセス処理の順序が予定順序と異なる場合には、誤った順序でアクセス処理が行われていると判定することができ、プログラム内の複数の処理の実行順序を監視することができる。
【００２２】
第２発明にあっては、判定手段は、検出手段で検出した固有情報に対応する順序情報が監視テーブルに存在するか否かを判定する。特定手段は、判定手段が存在すると判定した順序情報を特定する。すなわち、監視テーブルにより監視対象のアクセス処理の順序情報及び固有情報を関連付けておくことにより、仮に監視対象のプログラム内に監視対象のアクセス処理と監視対象でないアクセス処理とが混在する場合でも、監視対象外のアクセス処理を除外して、監視が必要なアクセス処理だけを抽出して監視することができる。これにより、監視対象のプログラムの仕様変更、機能変更等により監視対象のアクセス処理が異なるようになったときでも、監視が必要なアクセス処理は、監視テーブルを用いて特定することができるので、監視対象のプログラムを変更せずにそのまま使用することができる。
【００２３】
第３発明にあっては、監視テーブルは、順序情報により監視対象のアクセス処理の所定の実行順序を特定するようにしてある。例えば、順序情報は、モジュール等の区別を示す系列、当該系列内でのアクセス処理の実行順序を示すＩＤなどの情報を含む順序情報とすることができる。順序判定手段は、特定した順序情報と一致する監視テーブル内の順序情報に応じて、実行部で実行する監視対象のアクセス処理の順序が所定の実行順序（予定の実行順序）であるか否かを判定する。例えば、複数のアクセス処理が実行されることにより検出したＩＤと監視テーブル内のＩＤとが一致する場合、予定の順序でアクセス処理が実行されていると判定することができ、検出したＩＤと監視テーブル内のＩＤとが一致しない場合、誤った順序でアクセス処理が実行されていると判定することができる。
【００２４】
第４発明にあっては、エラー処理手段は、順序判定手段が実行部で実行する監視対象のアクセス処理の順序が所定の実行順序でないと判定した場合、所定のエラー処理を行う。エラー処理は、例えば、実行順序が誤っていると判定された当該アクセス処理の内容に応じて決定することができる。エラー処理は、例えば、実行順序が誤っていると判定されたアクセス処理の前段の処理であって、所定のポイントからの再度実行（リトライ）を行うとともに、実行順序に誤りが発生したことを示すエラーログを記録する。また、別のエラー処理としては、例えば、実行順序が誤っていると判定された時点でモジュールの実行を一旦停止し、実行順序に誤りが発生したことを通知することができる。
【００２５】
第５発明にあっては、固有情報は、監視対象のアクセス処理に対応する機械語のメモリアドレスを含む。機械語は、オブジェクトコード、命令コード、目的コードとも称される。機械語（命令コード）のアドレスは、メモリのアクセス処理の呼び出し元のアドレスとみなすことができる。監視用プログラム内の監視対象のアクセス処理それぞれを識別（区別）することができる固有情報として機械語のアドレスを用いるので、監視対象のアクセス処理の実行順序を正確に監視することができる。
【００２６】
第６発明にあっては、固有情報は、メモリからの読み込み処理若しくはメモリへの書き込みの処理の種別、アクセスするメモリのアドレス又はメモリへの書き込み値に関する情報を含む。これにより、メモリからの読込みに関する固有情報又はメモリへの書込みに関する固有情報が判れば、アクセス処理の順序情報が特定され、当該アクセス処理の実行順序を監視することができる。
【発明の効果】
【００２７】
本発明によれば、メモリアクセス処理の順序を監視することができる。
【図面の簡単な説明】
【００２８】
【図１】本実施の形態のプログラム生成装置の構成の一例を示すブロック図である。
【図２】入力されるプログラム（ソースコード）の一例を示す説明図である。
【図３】入力されるプログラム（ソースコード）の一例を示す説明図である。
【図４】入力されるプログラム（ソースコード）の一例を示す説明図である。
【図５】対象コードとしてのメモリアクセス用Ｉ／Ｆの一例を示す説明図である。
【図６】メモリアクセス用Ｉ／Ｆの予め定義された実行順序の一例を示す説明図である。
【図７】関連テーブルの一例を示す説明図である。
【図８】監視用コードが挿入された対象コード（メモリからの読込み）の一例を示す説明図である。
【図９】監視用コードが挿入された対象コード（メモリへの書込み）の一例を示す説明図である。
【図１０】監視テーブルの一例を示す説明図である。
【図１１】本実施の形態のプログラム生成装置による監視用コードが挿入されたソースコードの生成処理の一例を示すフローチャートである。
【図１２】本実施の形態のプログラム生成装置による監視テーブルの生成処理の一例を示すフローチャートである。
【図１３】メモリアクセス用Ｉ／Ｆの指定機能が設定された場合の関連データベースの例を示す説明図である。
【図１４】繰返先頭ＩＤが設定された場合のメモリアクセス用Ｉ／Ｆの予め定義された実行順序の例を示す説明図である。
【図１５】繰返先頭ＩＤが設定された場合の関連データベースの例を示す説明図である。
【図１６】通知予定ＩＤが設定された場合のプログラム（ソースコード）の例を示す説明図である。
【図１７】通知予定ＩＤが設定された場合のメモリアクセス用Ｉ／Ｆの予め定義された実行順序の例を示す説明図である。
【図１８】通知予定ＩＤが設定された場合の関連データベースの例を示す説明図である。
【図１９】デッドライン（閾値時間）が設けられた場合の関連テーブルの例を示す説明図である。
【図２０】本実施の形態の監視装置の構成の一例を示すブロック図である。
【図２１】監視対象プログラムが実行された場合に対象コードに挿入された監視用コードが監視部に通知する監視位置情報の一例を示す説明図である。
【図２２】監視対象プログラム内の各系列の実行順序の一例を示す説明図である。
【図２３】監視テーブルの各系列Ｘ、Ｙの順序情報の一例を示す説明図である。
【図２４】メモリアクセス順序判定部で判定したメモリアクセス用Ｉ／Ｆの実行順序の一例を示す説明図である。
【図２５】本実施の形態の監視装置による順序情報の特定処理の手順の一例を示すフローチャートである。
【図２６】本実施の形態の監視装置２００による監視処理の手順の一例を示すフローチャートである。
【図２７】図１３に例示の関連テーブルに基づく監視テーブルを用いた場合の判定例を示す説明図である。
【図２８】図１５に例示の関連テーブルに基づく監視テーブルを用いた場合の判定例を示す説明図である。
【図２９】図１８に例示の関連テーブルに基づく監視テーブルを用いた場合の判定例を示す説明図である。
【図３０】図１９に例示の関連テーブルに基づく監視テーブルを用いた場合の判定例を示す説明図である。
【発明を実施するための形態】
【００２９】
以下、本発明をその実施の形態を示す図面に基づいて説明する。図１は本実施の形態のプログラム生成装置１００の構成の一例を示すブロック図である。プログラム生成装置１００は、装置全体を制御する制御部１０、プログラム（ソースコード）１、関連テーブル２を取得するための入力部１１、記憶部１２、監視用コード挿入済プログラム３、監視テーブル４を出力する出力部１３、監視対象特定部１４、監視用コード生成部１５などを備える。
【００３０】
プログラム生成装置１００は、プログラム（ソースコード）１及び関連テーブル２が入力されると、監視用コード挿入済プログラム３、及び監視テーブル４を生成して出力する。
【００３１】
プログラム（ソースコード）１は、組込機器又は組込システムなどに組み込まれるプログラムであり、監視用コードが挿入される前のものである。プログラム１は、例えば、複数のモジュール（系列とも称することができる）を含む。
【００３２】
図２、図３及び図４は入力されるプログラム（ソースコード）１の一例を示す説明図である。図２は系列Ｘのソースコードであり、図３は系列Ｙのソースコードであり、図４は系列Ｚのソースコードである。系列Ｘ、Ｙ、Ｚは、例えば、それぞれ別のモジュールで構成され、系列Ｘ、Ｙ、Ｚは予め定められた順序で実行される。
【００３３】
図２に示すように、系列Ｘのモジュールは、ｍｏｄｕｌｅＡ＿ｍａｉｎという関数内でｍｏｄｕｌｅＡ＿ｉｎｐｕｔ、ｍｏｄｕｌｅＡ＿ｏｕｔｐｕｔという関数がこの順序で実行されるようになっている。また、ｍｏｄｕｌｅＡ＿ｉｎｐｕｔ、ｍｏｄｕｌｅＡ＿ｏｕｔｐｕｔという関数は、変数などメモリ領域にアクセスする際に、Ｗｒｉｔｅ(書込み先メモリ領域、書込み用データ)、Ｒｅａｄ（読出し元メモリ領域、読出しデータ格納先）というメモリアクセス用Ｉ／Ｆ（インタフェース）を呼び出す。メモリアクセス用Ｉ／Ｆは、実行順序を監視する対象コードであり、例えば、アセンブラコードとする（アセンブリ言語で記述する）ことができる。なお、図２中、対象コードは破線で囲まれたコードである。
【００３４】
図５は対象コードとしてのメモリアクセス用Ｉ／Ｆの一例を示す説明図である。図５Ａに示すように、Ｒｅａｄ(読出し元メモリ領域、読出しデータ格納先)は、読込みＩ／Ｆであり、指定された読出し元のメモリ領域ｍｅｍ（例えば、変数名、メモリアドレス等）から読出したデータを指定されたデータ格納先ａｒｅａに格納（設定）する。例えば、Ｒｅａｄ（変数ＭＥＭ＿Ａ、変数ｘ）は、定数ＭＥＭ＿Ａが指すメモリ領域から読出したデータを変数ｘに格納するという処理を行う。
【００３５】
また、図５Ｂに示すように、Ｗｒｉｔｅ(書込み先メモリ領域、書込み用データ)は、書込みＩ／Ｆであり、指定された書込み先メモリ領域ｍｅｍ（例えば、変数名、メモリアドレス等）に指定されたデータｄａｔａを書込む。例えば、Ｗｒｉｔｅ（変数ＭＥＭ＿Ａ、変数ｘ）は、変数ｘに格納されたデータを、定数ＭＥＭ＿Ａが指すメモリ領域に書込むという処理を行う。
【００３６】
図２に例示した系列Ｘのソースコード１においては、関数ｍｏｄｕｌｅＡ＿ｉｎｐｕｔから呼び出されるＷｒｉｔｅ（ＭＥＭ＿Ｊ、０）、関数ｍｏｄｕｌｅＡ＿ｏｕｔｐｕｔから呼び出されるＲｅａｄ（ＭＥＭ＿Ｊ、ａ）、Ｒｅａｄ（ＭＥＭ＿Ｊ、ａ）、Ｗｒｉｔｅ（ＭＥＭ＿Ｊ、ｂ）の４つのメモリアクセス用Ｉ／Ｆが、この順序で実行される。
【００３７】
また、図３に示すように、系列Ｙのモジュールは、ｍｏｄｕｌｅＢ＿ｍａｉｎという関数を実行する際に、割込み処理により、例えば、１秒経過の都度、ｍｏｄｕｌｅＣ＿ｉｎｔｅｒｒｕｐｔという関数が呼ばれるようになっている。図３に例示した系列Ｙのソースコード１においては、関数ｍｏｄｕｌｅＢ＿ｍａｉｎから呼び出されるＷｒｉｔｅ（ＭＥＭ＿Ｋ、１）、関数ｍｏｄｕｌｅＣ＿ｉｎｔｅｒｒｕｐｔから呼び出されるＷｒｉｔｅ（ＭＥＭ＿Ｌ、ｘ）、再度、関数ｍｏｄｕｌｅＢ＿ｍａｉｎから呼び出されるＲｅａｄ（ＭＥＭ＿Ｌ、ｌ）の３つのメモリアクセス用Ｉ／Ｆが、この順序で実行される。なお、図３中、対象コードは破線で囲まれたコードである。
【００３８】
また、図４に示すように、系列Ｚのモジュールは、ｍｏｄｕｌｅＸ＿ｃｔｒｌ、ｍｏｄｕｌｅＹ＿ｃｔｒｌ、又はｍｏｄｕｌｅＺ＿ｃｔｒｌという関数のいずれかが実行されると、ｍｏｄｕｌｅＷ＿ｓｌｅｅｐという関数を実行するようになっている。図４に例示した系列Ｚのソースコード１においては、ｍｏｄｕｌｅＸ＿ｃｔｒｌ、ｍｏｄｕｌｅＹ＿ｃｔｒｌ、又はｍｏｄｕｌｅＺ＿ｃｔｒｌのいずれかの関数から呼び出されるＷｒｉｔｅ（ＭＥＭ＿Ｓ、１）、関数ｍｏｄｕｌｅＷ＿ｓｌｅｅｐから呼び出されるＷｒｉｔｅ（ＭＥＭ＿Ｐ、１）の２つのメモリアクセス用Ｉ／Ｆが、この順序で実行される。なお、図４中、対象コードは破線で囲まれたコードである。
【００３９】
図６はメモリアクセス用Ｉ／Ｆの予め定義された実行順序の一例を示す説明図である。図６の例は、上述の図２乃至図４の例に対応する。図６に示すように、系列Ｘにおいては、関数ｍｏｄｕｌｅＡ＿ｉｎｐｕｔにてメモリ領域Ｊに０を書込む処理を行い（対象コードの順序情報ＩＤ＝１）、関数ｍｏｄｕｌｅＡ＿ｏｕｔｐｕｔにてメモリ領域Ｊから読出したデータを変数ａに格納する処理を行い（対象コードの順序情報ＩＤ＝２）、関数ｍｏｄｕｌｅＡ＿ｏｕｔｐｕｔにてメモリ領域Ｊから読出したデータを再度変数ａに格納する処理を行い（対象コードの順序情報ＩＤ＝３）、関数ｍｏｄｕｌｅＡ＿ｏｕｔｐｕｔにてメモリ領域Ｊに変数ｂの値を書込む処理を行い（対象コードの順序情報ＩＤ＝４、末尾ＩＤ＝４）、最初の処理（先頭ＩＤ＝１）に戻って同様の処理を繰り返す。
【００４０】
また、系列Ｙにおいては、関数ｍｏｄｕｌｅＢ＿ｍａｉｎにてメモリ領域Ｋに１を書込む処理を行い（対象コードの順序情報ＩＤ＝１）、関数ｍｏｄｕｌｅＣ＿ｉｎｔｅｒｒｕｐｔにてメモリ領域Ｌに変数ｘの値を書込む処理を行い（対象コードの順序情報ＩＤ＝２）、関数ｍｏｄｕｌｅＢ＿ｍａｉｎにてメモリ領域Ｌから読出したデータを変数ｌに格納する処理を行い（対象コードの順序情報ＩＤ＝３、末尾ＩＤ＝３）、最初の処理（先頭ＩＤ＝１）に戻って同様の処理を繰り返す。
【００４１】
また、系列Ｚにおいては、いずれかの関数ｍｏｄｕｌｅＸ＿ｃｔｒｌ、ｍｏｄｕｌｅＹ＿ｃｔｒｌ、又はｍｏｄｕｌｅＺ＿ｃｔｒｌにてメモリ領域Ｓに１を書込む処理を行い（対象コードの順序情報ＩＤ＝１）、関数ｍｏｄｕｌｅＷ＿ｓｌｅｅｐにてメモリ領域Ｐに１を書込む処理を行い（対象コードの順序情報ＩＤ＝２、末尾ＩＤ＝２）、最初の処理（先頭ＩＤ＝１）に戻って同様の処理を繰り返す。
【００４２】
図６に例示した各系列の関数の実行順序、すなわち監視対象となるメモリアクセス用Ｉ／Ｆの実行順序は、予めユーザが、例えば、関連テーブルにより定義することができる。
【００４３】
図７は関連テーブル２の一例を示す説明図である。図７に例示の関連テーブル２は、図２乃至図６の例に対応している。関連テーブル２は、図２乃至図４にて例示したプログラムの関数呼び出し順序（メモリアクセス用Ｉ／Ｆの実行順序）を監視するためのテーブルであり、ユーザが予め定義して作成するものである。
【００４４】
関連テーブル２は、メモリアクセスに関する複数のメモリアクセス用Ｉ／Ｆ（対象コード）の実行順序を定めた順序情報と当該メモリアクセス用Ｉ／Ｆのメモリアクセスに関する固有情報とを予め関連付けたテーブルである。順序情報は、メモリアクセスの順序を特定することができる情報である。図７の例では、順序情報は、モジュール等の区別を示す系列、当該系列内でのメモリアクセス用Ｉ／Ｆ（あるいは当該メモリアクセス用Ｉ／Ｆを呼び出す関数）の実行順序を示すＩＤなどの情報を含む。
【００４５】
また、固有情報は、メモリアクセス用Ｉ／Ｆによるメモリアクセスに関する固有の情報である。図７の例では、監視位置情報が固有情報である。監視位置情報は、監視対象となるメモリアクセスが存在する位置を表し、例えば、メモリアクセスを実行するメモリアクセス用Ｉ／Ｆを呼び出す関数名、アクセスするメモリ領域（メモリのアドレス）、メモリアクセスの処理内容（読込み処理又は書込み処理の別）、メモリアクセスが書込み処理である場合の書込み値、同一関数において同一処理内容のメモリアクセス処理であるメモリアクセス用Ｉ／Ｆの実行順番を識別する番号、メモリアクセス用Ｉ／Ｆに対応する命令コード（オブジェクトコード）のアドレスなどを含む。
【００４６】
監視位置情報の関数名は、メモリアクセス用Ｉ／Ｆを呼び出す関数の名前である。関数単位で指定する理由は、同じモジュールでも入力関数、出力関数等の複数の関数があり、例えば、入力関数を実行した後に出力関数を実行するというような処理順序が関数で定義されているからである。なお、関数名は省略することができるが、関数名を指定することにより、ユーザが認識しやすくなる。
【００４７】
また、監視位置情報に書込み値を記載する理由は、同じメモリ領域でも書込むデータによって処理の内容が大きく異なる場合があるからである。例えば、ネットワークの通信状態を表すメモリ領域に正常値と異常値のいずれを書込むかによって、その後の処理内容は大きく異なる。
【００４８】
また、監視位置情報の番号は、監視位置情報の関数名、メモリ領域、処理内容及び書込み値のすべてが同じである場合、メモリアクセスが関数の先頭から何番目に実行されるかによって区別するためのものである。図７の例では、系列ＸのＩＤ＝２、ＩＤ＝３のメモリアクセスが同じであるので、関数ｍｏｄｕｌｅＡ＿ｏｕｔｐｕｔの１番目、２番目のメモリアクセスであることを指定すべく番号１、２を用いている。なお、番号は省略してもよい。
【００４９】
上述のように、関連テーブル２の順序情報は、監視位置情報で指定されるメモリアクセスの実行順序を定義する。例えば、同じ系列にあるメモリアクセスが、指定されたＩＤの順序通りに実行されている場合には正常であると判定することができる。なお、ＩＤは定数Ｃずつ増加する連番とすることができる。図７の例では、定数Ｃは１であるが、これに限定されるものではない。
【００５０】
本実施の形態のプログラム生成装置１００は、関連テーブル２で定義された情報（順序情報、監視位置情報）を用いて、監視対象となるプログラム１中で使用されるメモリアクセス用Ｉ／Ｆの中に、プログラムがメモリアクセスする順序を監視する監視用コード（検出コード）を自動的に挿入し、監視用コードが挿入されたプログラム（ソースコード）３を生成する。また、本実施の形態のプログラム生成装置１００は、関連テーブル２を用いて、監視対象となるプログラム内のメモリアアクセスが正しい順序で実行されているか否を監視する際に用いられる監視テーブル４を生成する。以下、これらの点について説明する。
【００５１】
監視対象特定部１４は、ソースコード１の中からメモリアクセス用Ｉ／Ｆ（対象コード）を特定する特定手段としての機能を有する。監視対象特定部１４は、関連テーブル２を用いて、ソースコード１の中から複数のメモリアクセス用Ｉ／Ｆを特定する。例えば、監視対象特定部１４は、関連テーブル２内の監視位置情報の関数名を用いてソースコード１を検索し、関数から呼び出されているメモリアクセス用Ｉ／Ｆを特定する。
【００５２】
監視用コード生成部１５は、監視用コード（検出コード）をメモリアクセス用Ｉ／Ｆ内に挿入する挿入手段としての機能を有する。監視用コードは、メモリアクセス用Ｉ／Ｆが実行するメモリアクセスに関する固有情報（監視位置情報）を検出するコードである。
【００５３】
図８は監視用コードが挿入された対象コード（メモリからの読込み）の一例を示す説明図である。監視対象特定部１４が、メモリアクセス用Ｉ／Ｆ（対象コード）であるＲｅａｄ（ｍｅｍ、ａｒｅａ）を特定した場合、監視用コード生成部１５は、特定されたＲｅａｄ（ｍｅｍ、ａｒｅａ）の中に、監視用コードＣｈｅｃｋ（ｒ１、０、０、ｒ３）を挿入する。
【００５４】
図８に示すように、メモリアクセス用Ｉ／ＦであるＲｅａｄ（ｍｅｍ、ａｒｅａ）に対応する監視用コードＣｈｅｃｋ（ｒ１、０、０、ｒ３）は、４つの引数を固有情報として検出して監視モジュール（不図示）に通知する。
【００５５】
第１引数ｒ１は、アクセスするメモリアドレスが格納されたレジスタであり、メモリアクセス用Ｉ／Ｆがアクセスするメモリ領域である。第２引数は０であり、メモリアクセス用Ｉ／Ｆの処理内容が読出しであることを示す。第３引数は０であり、処理内容が読出しである場合には０に固定されている。第４引数ｒ３は、Ｒｅａｄの呼出し元のアドレスが格納されたレジスタであり、メモリアクセス用Ｉ／Ｆの呼出し元である命令コード（アセンブラ）のアドレスである。
【００５６】
命令コード（アセンブラ）のアドレスは、以下のようにして取得することができる。すなわち、制御部１０は、監視用コードが挿入されたメモリアクセス用Ｉ／Ｆを含むソースコードをオブジェクトコードに変換し、メモリアクセス用Ｉ／Ｆに対応するオブジェクトコードに固有のメモリアドレスを割り当てる割当手段としての機能を有する。すなわち、制御部１０は、コンパイラの機能を有し、ソースコードからオブジェクトコードへの変換は、コンパイラを用いることができる。なお、制御部１０にコンパイラの機能を持たせるのではなく、制御部１０とは別にコンパイラを備えるようにしてもよい。また、ソースコードの他にライブラリが存在する場合には、リンカによりライブラリをオブジェクトコードにリンクさせておくことができる。
【００５７】
オブジェクトコードは、命令コード、目的コード、機械語とも称される。なお、コンパイラが割り当てるメモリアドレスは、命令コード（オブジェクトコード）のアドレスであるが、メモリアクセス用Ｉ／Ｆの呼び出し元のアドレスとみなすことができる。
【００５８】
図９は監視用コードが挿入された対象コード（メモリへの書込み）の一例を示す説明図である。監視対象特定部１４が、メモリアクセス用Ｉ／Ｆ（対象コード）であるＷｒｉｔｅ（ｍｅｍ、ｄａｔａ）を特定した場合、監視用コード生成部１５は、特定されたＷｒｉｔｅ（ｍｅｍ、ｄａｔａ）の中に、監視用コードＣｈｅｃｋ（ｒ１、１、ｒ２、ｒ３）を挿入する。
【００５９】
図９に示すように、メモリアクセス用Ｉ／ＦであるＷｒｉｔｅ（ｍｅｍ、ｄａｔａ）に対応する監視用コードＣｈｅｃｋ（ｒ１、１、ｒ２、ｒ３）は、４つの引数を固有情報として検出して監視モジュール（不図示）に通知する。
【００６０】
第１引数ｒ１は、アクセスするメモリアドレスが格納されたレジスタであり、メモリアクセス用Ｉ／Ｆがアクセスするメモリ領域である。第２引数は１であり、メモリアクセス用Ｉ／Ｆの処理内容が書込みであることを示す。第３引数ｒ２は、処理内容が書込みである場合の書き込み値が格納されたレジスタである。第４引数ｒ３は、Ｗｒｉｔｅの呼出し元のアドレスが格納されたレジスタであり、メモリアクセス用Ｉ／Ｆの呼出し元である命令コード（アセンブラ）のアドレスである。
【００６１】
監視用コード生成部１５が生成する監視用コード挿入済プログラム（ソースコード）３は、プログラム（ソースコード）１内の監視対象となるメモリアクセス用Ｉ／Ｆ内に、図８、図９で例示した監視用コードＣｈｅｃｋを挿入したものである。
【００６２】
監視用コード生成部１５は、監視テーブル４（検出用テーブル）を生成する生成手段としての機能を有する。すなわち、監視用コード生成部１５は、メモリアクセス用Ｉ／Ｆを特定する順序情報、監視位置情報、前述の命令コードのアドレスを関連付けた監視テーブル４を生成する。
【００６３】
図１０は監視テーブル４の一例を示す説明図である。図１０に示すように、監視テーブル４は、関連テーブル１の各メモリアクセス用Ｉ／Ｆに対応する命令コードのアドレスを関連テーブル１に追加した構成をなす。監視テーブル４においても、関連テーブル１と同様に、関数名、番号は省略することができる。また、監視テーブル４に系列毎に先頭ＩＤ（最初に実行される対象コードのＩＤ）及び末尾ＩＤ（最後に実行される対象コードのＩＤ）を加えることもできる。
【００６４】
次に、本実施の形態のプログラム生成装置１００の動作について説明する。図１１は本実施の形態のプログラム生成装置１００による監視用コードが挿入されたソースコード３の生成処理の一例を示すフローチャートである。なお、以下の説明では便宜上処理の主体を制御部１０とする。
【００６５】
制御部１０は、プログラムのソースコード１を取得し（Ｓ１１）、予めユーザが定義した関連テーブル２を取得する（Ｓ１２）。制御部１０は、例えば、関数名を用いてソースコード１を検索し（Ｓ１３）、監視対象となる対象コード、すなわちメモリアクセス用Ｉ／Ｆを特定する（Ｓ１４）。
【００６６】
制御部１０は、特定した対象コードがメモリからの読込みコード（読込み用のメモリアクセス用Ｉ／Ｆ）であるか否かを判定し（Ｓ１５）、対象コードがメモリからの読込みコードである場合（Ｓ１５でＹＥＳ）、メモリからの読込みのための監視用コードを対象コードであるメモリアクセス用Ｉ／Ｆ内に挿入する（Ｓ１６）。
【００６７】
対象コードがメモリからの読込みコードでない場合（Ｓ１５でＮＯ）、すなわち対象コードがメモリへの書込みコード（書込み用のメモリアクセス用Ｉ／Ｆ）である場合、制御部１０は、メモリへの書込みのための監視用コードを対象コードであるメモリアクセス用Ｉ／Ｆ内に挿入する（Ｓ１７）。
【００６８】
制御部１０は、ソースコード１内のすべての対象コードを検索したか否かを判定し（Ｓ１８）、すべての対象コードを検索していない場合（Ｓ１８でＮＯ）、ステップＳ１３以降の処理を繰り返す。すべての対象コードを検索した場合（Ｓ１８でＹＥＳ）、制御部１０は、監視用コードが挿入されたソースコード３を生成し（Ｓ１９）、処理を終了する。
【００６９】
図１２は本実施の形態のプログラム生成装置１００による監視テーブル４の生成処理の一例を示すフローチャートである。制御部１０は、図１１に例示の処理により生成された監視用コード挿入済のソースコード３をコンパイルし（Ｓ３１）、ソースコードをオブジェクトコードに変換する。なお、オブジェクトコードに変換することにより、メモリアクセス用Ｉ／Ｆ（対象コード）に対応する命令コードのアドレスを得ることができる。
【００７０】
制御部１０は、監視用コード挿入済のソースコード３を検索して、関連テーブル２の監視位置情報に対応する対象コード（メモリアクセス用Ｉ／Ｆ）を特定する（Ｓ３２）。制御部１０は、特定した対象コードに対応する命令コードのアドレスを取得する（Ｓ３３）。
【００７１】
制御部１０は、関連テーブル２のすべての監視位置情報について対象コードの特定を完了したか否かを判定し（Ｓ３４）、完了していない場合（Ｓ３４でＮＯ）、ステップＳ３３以降の処理を繰り返す。
【００７２】
関連テーブル２のすべての監視位置情報について対象コードの特定を完了した場合（Ｓ３４でＹＥＳ）、制御部１０は、関連テーブル２から、特定した対象コードの順序情報を取得する（Ｓ３５）。
【００７３】
制御部１０は、取得した順序情報に基づいて系列ごとに先頭ＩＤ（最初に実行される対象コードのＩＤ）、及び末尾ＩＤ（最後に実行される対象コードのＩＤ）を特定し（Ｓ３６）、特定した先頭ＩＤ、末尾ＩＤ、及びステップＳ３３で取得した命令コードのアドレスを関連テーブル２に付加して監視テーブル４を生成し（Ｓ３７）、処理を終了する。
【００７４】
上述のように、本実施の形態によれば、プログラムが複数のモジュール(例えば、系列Ｘ、Ｙ、…)で構成され、それぞれのモジュール内に複数のメモリアクセスを実行する対象コードが存在する場合に、当該対象コード内に監視用コードを挿入し（組み込み）、挿入した監視用コードが検出する固有情報の順序に応じて、実行される対象コードの順序が判るので、対象コードが行うメモリアクセス処理が正しい順序で実行されているか否かを判定することができるプログラム（ソースコード）を生成することができる。また、割込み処理からのメモリアクセスの順序も監視することができるプログラムを生成することができる。
【００７５】
また、本実施の形態によれば、ソースコード内の対象コード（メモリアクセスを行うコード）それぞれを識別（区別）することができる固有情報として各対象コードに個別かつ固有に対応するオブジェクトのアドレスを用いることにより、対象コードの実行順序を正確に監視することができるプログラムを生成することができる。
【００７６】
また、本実施の形態によれば、対象コード毎に、例えば、系列、ＩＤ、命令コードのアドレスを関連付けた監視テーブル４を生成することにより、対象コードに対応する命令コードのアドレスが判れば、当該対象コードの順序情報が特定され、対象コードの実行順序を監視することができるプログラムを生成することができる。
【００７７】
また、本実施の形態によれば、メモリからの読込みに関する位置監視情報又はメモリへの書込みに関する位置監視情報を検出することができる監視用コードを対象コード内に挿入するので、対象コードに対応するメモリからの読込みに関する位置監視情報又はメモリへの書込みに関する位置監視情報が判れば、当該対象コードの順序情報が特定され、対象コードの実行順序を監視することができるプログラムを生成することができる。
【００７８】
また、監視用コードを挿入する方法として、例えば、監視対象のコードの前段又は後段に、監視対象のコードの数だけの監視用コードを挿入する方法も考えられる。しかし、このような場合には、監視対象のコードとは別に監視用コードがソースコードに追加されることになり、プログラムのサイズが監視用コードを挿入することで飛躍的に増加してしまう可能性がある。特に監視対象のコードが多数存在する場合には、プログラムのＲＯＭサイズが増大するという問題が顕著になる。しかし、本実施の形態によれば、対象コードであるメモリアクセス用Ｉ／Ｆの内部に監視用コードを埋め込む構成とするので、プログラムのＲＯＭ消費量は監視対象の処理数には比例せず、プログラムのＲＯＭサイズが増大するという問題がない。
【００７９】
本実施の形態で説明した関連テーブル２は、上述の図７の例に限定されるものではない。以下に関連テーブルの他の例について説明する。
【００８０】
図１３はメモリアクセス用Ｉ／Ｆの指定機能が設定された場合の関連データベース２ｂの例を示す説明図である。指定機能とは、同じ読出し又は書込み処理であっても複数の異なる機能のいずれかを指定するものであり、例えば、読出すデータのサイズ、あるいは書込むデータのサイズによってメモリアクセス用Ｉ／Ｆを使い分けることができる。
【００８１】
図１３の例では、データのサイズが８ビットである場合、Ｗｒｉｔｅ０８又はＲｅａｄ０８を用い、データのサイズが１６ビットである場合、Ｗｒｉｔｅ１６又はＲｅａｄ１６を用いる。また、この場合、Ｗｒｉｔｅ０８、Ｒｅａｄ０８、Ｗｒｉｔｅ１６、Ｒｅａｄ１６には、それぞれ異なる命令コードアドレスが対応する。図１０の例と同様に、図１３に命令コードのアドレスをメモリアクセス用Ｉ／Ｆ毎に加えることにより監視テーブルを生成することができる。
【００８２】
図１３の例のような関連テーブル２ｂで実行順序が定義されたプログラムでは、特定のメモリアクセス用Ｉ／Ｆからアクセスされた場合にのみ予定順序通りに実行されていると判断し、指定外のメモリアクセス用Ｉ／Ｆからのアクセスをエラーとして検出する機能を設けることができる。例えば、８ビット用の読出し用Ｉ／Ｆで読出されるべきメモリ領域が、１６ビット用の読出し用Ｉ／Ｆで読出された場合には、エラーであると判断することができる。
【００８３】
また、関連テーブルの別の例として、位置情報の末尾ＩＤの次に実行するＩＤ（先頭ＩＤと異なるＩＤ）を設定する機能（繰返先頭ＩＤ設定機能）を設けることもできる。
【００８４】
図１４は繰返先頭ＩＤが設定された場合のメモリアクセス用Ｉ／Ｆの予め定義された実行順序の例を示す説明図であり、図１５は繰返先頭ＩＤが設定された場合の関連データベース２ｃの例を示す説明図である。
【００８５】
図１４の例では、系列Ｘについては、末尾ＩＤ＝４のメモリアクセス用Ｉ／Ｆが実行された後には、先頭ＩＤ＝１のメモリアクセス用Ｉ／Ｆを実行するのではなく、繰返先頭ＩＤ＝２のメモリアクセス用Ｉ／Ｆから再び末尾ＩＤに向かって繰り返し実行するように設定されている。また、系列Ｙについては、末尾ＩＤ＝３のメモリアクセス用Ｉ／Ｆが実行された後には、先頭ＩＤ＝１のメモリアクセス用Ｉ／Ｆを実行するのではなく、繰返先頭ＩＤ＝３のメモリアクセス用Ｉ／Ｆを繰り返し実行するように設定されている。
【００８６】
また、図１５に示すように、関連テーブル２ｃには、順序情報の中に繰返先頭ＩＤが系列Ｘ、Ｙ毎に設けられている。図１０の例と同様に、図１５に命令コードのアドレスをメモリアクセス用Ｉ／Ｆ毎に加えることにより監視テーブルを生成することができる。
【００８７】
繰返先頭ＩＤを設定することにより、例えば、電源オンなどの特定の条件が充足したときに、データを初期化する初期化関数を呼び出し、その後は一定周期経過の都度、データを処理する周期処理関数を呼び出すようなプログラム内のメモリアクセスの実行順序を監視するプログラムを生成することができる。図１４、図１５の例では、関数ｍｏｄｕｌｅＡ＿ｉｎｉｔが初期化関数であり、関数ｍｏｄｕｌｅＡ＿ｍａｉｎが周期処理関数となる。
【００８８】
また、繰返先頭ＩＤを設定することにより、例えば、スリープ状態からの復帰時などの特定条件下でのみ起動し、起動後は停止し続ける停止処理関数を呼び出すようなプログラム内のメモリアクセスの実行順序を監視するプログラムを生成することができる。図１４、図１５の例では、関数ｍｏｄｕｌｅＢ＿ｗａｋｅｕｐ、関数ｍｏｄｕｌｅＣ＿ｗａｋｅｕｐが特定条件下で呼び出される関数であり、関数ｍｏｄｕｌｅＢ＿ｍａｉｎが停止処理関数となる。
また、関連テーブルの別の例として、順序情報のＩＤが複数の通知予定ＩＤを設定する機能を設けることもできる。通知予定ＩＤとは、現在実行しているメモリアクセス用Ｉ／Ｆの次に実行されるメモリアクセス用Ｉ／ＦのＩＤである。すなわち、上述の例では、メモリアクセス用Ｉ／ＦのＩＤが定数Ｃ（例えば、１）ずつ増加する連番とし、現在のＩＤに定数Ｃを加算したＩＤを通知予定ＩＤとした。しかし、個々のＩＤに通知予定ＩＤを予め設定してもよく、通知予定ＩＤを設定する場合に複数の通知予定ＩＤを設定することもできる。
【００８９】
図１６は通知予定ＩＤが設定された場合のプログラム（ソースコード）１ｂの例を示す説明図であり、図１７は通知予定ＩＤが設定された場合のメモリアクセス用Ｉ／Ｆの予め定義された実行順序の例を示す説明図であり、図１８は通知予定ＩＤが設定された場合の関連データベース２ｄの例を示す説明図である。
【００９０】
図１６、図１７の例では、関数ｍｏｄｕｌｅＢ＿ｍａｉｎにてメモリ領域Ｑから読出したデータを変数ｑに格納した（ＩＤ＝１）後、所要の条件にしたがってメモリ領域Ｋに１を書込む（ＩＤ＝２）か、あるいはメモリ領域Ｋに０を書込む（ＩＤ＝３）処理のいずれかを実行する。そして、メモリ領域Ｋに１を書込む（ＩＤ＝２）処理を行った場合には、メモリ領域Ｌに変数ｍを書込む（ＩＤ＝４）処理を行って先頭ＩＤ＝１の処理に戻る。一方、メモリ領域Ｋに０を書込む（ＩＤ＝３）処理を行った場合には、メモリ領域Ｌに変数ｎを書込む（ＩＤ＝５）処理を行って先頭ＩＤ＝１の処理に戻る。
【００９１】
図１８に示すように、関連テーブル２ｄには、系列Ｘに対して、通知予定ＩＤが設けられている。系列Ｘでは、ＩＤ＝１の次には条件に応じてＩＤ＝２又は３のいずれかのメモリアクセス用Ｉ／Ｆが実行され、ＩＤ＝２の次にはＩＤ＝４のメモリアクセス用Ｉ／Ｆが実行され、ＩＤ＝３の次にはＩＤ＝５のメモリアクセス用Ｉ／Ｆが実行される。また、図１０の例と同様に、図１８に命令コードのアドレスをメモリアクセス用Ｉ／Ｆ毎に加えることにより監視テーブルを生成することができる。
【００９２】
図１８に示すような関連テーブル２ｄを用いることにより、プログラムの動作中の状況に応じて複数の処理に分岐する条件分岐処理を監視することができるプログラムを生成することができる。
【００９３】
また、関連テーブルの別の例として、あるメモリアクセス用Ｉ／Ｆが実行された後、次のメモリアクセス用Ｉ／Ｆが実行されるまでの時間を計測して、所定のデッドライン（閾値時間）を超えた場合には、エラーとして取り扱うこともできる。
【００９４】
図１９はデッドライン（閾値時間）が設けられた場合の関連テーブル２ｅの例を示す説明図である。図１９に示すように、関連テーブル２ｅには、順序情報、監視位置情報に加えて時間計測用情報を設けてあり、時間計測用情報は、例えば、時間計測要否、デッドライン（閾値時間）などの情報を含む。
【００９５】
時間計測要否が「必要」となっているメモリアクセス用Ｉ／Ｆは、処理を開始してからの経過時間が計測される。そして経過時間がデッドラインを超える前に次にＩＤのメモリアクセス用Ｉ／Ｆが実行された場合には、正常であると判定し、経過時間がデッドラインを超えた後に次にＩＤのメモリアクセス用Ｉ／Ｆが実行された場合には、異常であると判定する。
【００９６】
プログラム生成装置１００は、関連テーブルから系列、ＩＤ、時間計測用情報を取得し、取得した情報をメモリアクセス用Ｉ／Ｆ毎に纏めて監視テーブル４を生成する。この場合、監視位置情報は、監視テーブル４に格納してもよく、あるいは格納しなくてもよい。
【００９７】
また、プログラム生成装置１００は、経過時間計測関数を、一定時間ごとに発生する割込み処理から呼び出される関数として、プログラムのソースコード１に埋め込むことで監視用コードが挿入されたソースコード３を生成する。
【００９８】
また、図７等に例示した関連テーブルにおいて、監視位置情報の関数名に代えてソースファイル名を指定することもできる。この場合、指定されたソースファイルの先頭から関連テーブルのメモリ領域、処理内容、書込み値、番号に該当するメモリアクセス用Ｉ／Ｆを検索し、検索したメモリアクセス用Ｉ／Ｆに対応する命令コードのアドレスを当該メモリアクセス用Ｉ／Ｆの呼出し元のアドレスとすることができる。
【００９９】
また、図７等に例示した関連テーブルにおいて、監視位置情報からメモリ領域、処理内容及び書込み値以外の情報を省略することもできる。例えば、系列Ｘに対して、ＩＤ＝１（先頭）がメモリ領域への書込み処理、ＩＤ＝２（末尾）がメモリ領域からの読出し処理であるような関連テーブルの如くである。これにより、特定のメモリ領域にデータが書込まれてからデータが読出されたことは監視したいが、その処理を行ったプログラムの関数、書込んだデータの値は何でもよいというような監視を行うことができるプログラムを生成することができる。
【０１００】
上述のプログラム生成装置１００は、ＣＰＵ、ＲＡＭなどを備えたコンピュータを用いて実現することもできる。すなわち、図１１及び図１２に示すような、各処理手順を定めたコンピュータプログラムを記録した記録媒体をコンピュータに備えられた記録媒体読取部で読み取り、読み取って得られたコンピュータプログラムをＲＡＭにロードし、コンピュータプログラムをＣＰＵで実行することにより、コンピュータ上でプログラム生成装置１００を実現することができる。
【０１０１】
次に、本実施の形態の監視装置２００について説明する。図２０は本実施の形態の監視装置２００の構成の一例を示すブロック図である。監視装置２００は、例えば、車両に搭載されるＥＣＵ（Electronic Control Unit）であり、監視対象プログラム（監視用コード挿入済ソースコード）３内の各処理が所定の順序で実行されているか否かを監視する。
【０１０２】
監視装置２００は、マイクロコンピュータ（以下、マイコンと称する）２０、記憶部２４、２５、機器インタフェース２６、通信インタフェース２７などを備える。また、マイコン２０は、実行部２１、監視部２２、エラー処理部２３などを備える。監視部２２は、ＩＤ特定部２２１、メモリアクセス順序判定部２２２、対応決定部２２３などを備える。
【０１０３】
機器インタフェース２６は、車両に搭載された車載機器３００とのインタフェース機能を有し、マイコン２０は、車載機器３００を制御することができる。車載機器３００は、例えば、車内照明、ヘッドライト、ブレーキランプ、ヒータ、エアコン、警報器、ドアロック機構、メータ類、ウインカー、カーナビゲーション装置等であるが、これらに限定されない。
【０１０４】
通信インタフェース２７は、車載ＬＡＮを経由して他のＥＣＵ２１０等とのインタフェース機能を有する。マイコン２０は、通信インタフェース２７を介して他のＥＣＵ２１０等との間でデータの送受信を行うことができる。
【０１０５】
記憶部２４には、監視対象プログラム３を記憶してある。監視対象プログラム３は、例えば、上述のプログラム生成装置１００が生成する監視用コードが挿入されたプログラムである。なお、監視対象プログラム３は、実行形式のプログラムである。
【０１０６】
また、記憶部２５には、監視テーブル４を記憶してある。監視テーブル４は、例えば、図１０に例示するテーブルであり、上述のプログラム生成装置１００が生成する監視テーブルである。なお、記憶部２４、２５は、例えば、書き換え可能な不揮発性メモリであり、１つに纏めることもできる。
【０１０７】
実行部２１は、演算処理を行うＣＰＵ（Central Processor Unit）、ＲＡＭ等で構成され、記憶部２４に記憶された監視対象プログラム３を読み出し、監視対象プログラム３内の複数の処理（インストラクション、命令）を実行することにより、車載機器３００の制御を行う。
【０１０８】
実行部２１で監視対象プログラム３が実行されると、監視対象プログラム３内の監視対象の対象コード、すなわちメモリアクセス用Ｉ／Ｆに挿入（埋め込まれた）監視用コード（検出コード）は、（１）メモリアクセス用Ｉ／Ｆがアクセスするメモリ領域（メモリアドレス）、（２）メモリアクセス用Ｉ／Ｆの処理内容（読出し、書込み）、（３）メモリアクセス用Ｉ／Ｆの処理内容が書込みである場合の書込み値、（４）メモリアクセス用Ｉ／Ｆの呼出し元である命令コードのアドレスなどの監視位置情報（メモリアクセスに関する固有情報）を監視部２２へ通知（出力）する。
【０１０９】
すなわち、実行部２１又は監視用コードは、メモリへのアクセス処理によるメモリアクセスに関する監視位置情報（固有情報）を検出する検出手段としての機能を有する。
【０１１０】
図２１は監視対象プログラム３が実行された場合に対象コードに挿入された監視用コードが監視部２２に通知する監視位置情報の一例を示す説明図である。図２１に示すように、系列Ｘの監視対象プログラム内に、メモリアクセス用Ｉ／ＦであるＲｅａｄ（ｍｅｍ、ａｒｅａ）、Ｗｒｉｔｅ（ｍｅｍ、ｄａｔａ）がこの順序で実行されるとする。この場合、Ｒｅａｄ（ｍｅｍ、ａｒｅａ）には、図８で例示した監視用コードＣｈｅｃｋ（ｒ１、０、０、ｒ３）が挿入されているので、Ｒｅａｄ（ｍｅｍ、ａｒｅａ）がアクセスするメモリアドレス（例えば、ＭＥＭ＿Ｊ）、処理内容（読出し）を示す「０」、命令コードのアドレス（例えば、「３６ＡＣ」）などの監視位置情報を監視部２２へ通知する。
【０１１１】
また、同様に、Ｗｒｉｔｅ（ｍｅｍ、ｄａｔａ）には、図９で例示した監視用コードＣｈｅｃｋ（ｒ１、１、ｒ２、ｒ３）が挿入されているので、Ｗｒｉｔｅ（ｍｅｍ、ｄａｔａ）がアクセスするメモリアドレス（例えば、ＭＥＭ＿Ｊ）、処理内容（書込み）を示す「１」、命令コードのアドレス（例えば、「５Ａ１Ｆ」）などの監視位置情報を監視部２２へ通知する。
【０１１２】
ＩＤ特定部２２１は、監視位置情報に対応する順序情報を特定する特定手段としての機能を有する。ＩＤ特定部２２１は、監視テーブル４を用いて、実行部２１（監視用コード）から順位通知された監視位置情報毎に、当該監視位置情報に対応する順序情報を順次特定する。複数のメモリアクセス用Ｉ／Ｆが順番に実行される都度、当該メモリアクセス用Ｉ／Ｆに固有の監視位置情報がＩＤ特定部２２１に通知されるので、通知された監視位置情報に対応する順序情報を順次特定することにより、アクセス処理の実行順序を検出することができる。
【０１１３】
監視部２２は、監視対象のアクセス処理（メモリアクセス用Ｉ／Ｆによる処理）の順序を監視する監視手段としての機能を有する。監視部２２は、特定した順序情報に応じて実行部２１が実行する監視対象のメモリアクセス用Ｉ／Ｆの実行順序を監視する。例えば、監視対象のメモリアクセス用Ｉ／Ｆの実行順序が予定順序のとおりであれば、正しい順序でアクセス処理が行われていると判定することができ、また、監視対象のメモリアクセス用Ｉ／Ｆの実行順序が予定順序と異なる場合には、誤った順序でアクセス処理が行われていると判定することができ、監視対象プログラム内の複数のメモリアクセス処理の実行順序を監視することができる。
【０１１４】
また、ＩＤ特定部２２１は、実行部２１から通知された監視位置情報に対応する順序情報が監視テーブル４に存在するか否かを判定する判定手段としての機能を有する。ＩＤ特定部２２１は、実行部２１から通知された監視位置情報に対応する順序情報が監視テーブル４に存在すると判定した場合に、当該順序情報を特定する。すなわち、監視テーブル４により監視対象のアクセス処理の順序情報及び監視位置情報を関連付けておくことにより、仮に監視対象プログラム３内に監視対象のアクセス処理と監視対象でないアクセス処理とが混在する場合でも、監視対象外のアクセス処理を除外して、監視が必要なアクセス処理だけを抽出して監視することができる。これにより、監視対象プログラム３の仕様変更、機能変更等により監視対象のアクセス処理が異なるようになったときでも、監視が必要なアクセス処理は、監視テーブル４を用いて特定することができるので、監視対象プログラム３のメモリアクセス用Ｉ／Ｆから監視用コードを削除するなどの変更せずにそのまま使用することができる。
【０１１５】
メモリアクセス順序判定部２２２は、順序判定手段としての機能を有する。メモリアクセス順序判定部２２２は、ＩＤ特定部２２１で特定した順序情報と一致する監視テーブル４内の順序情報に応じて、実行部２１で実行する監視対象のメモリアクセス用Ｉ／Ｆの実行順序が所定の実行順序（予定の実行順序）であるか否かを判定する。例えば、複数のアクセス処理が実行されることにより検出したＩＤと監視テーブル４内のＩＤとが一致する場合、予定の順序でアクセス処理が実行されていると判定することができ、検出したＩＤと監視テーブル内のＩＤとが一致しない場合、誤った順序でアクセス処理が実行されていると判定することができる。
【０１１６】
以下では、監視対象プログラム３内の各モジュール（系列）が所定の順序で実行されている場合でも、それぞれモジュール内の複数のメモリアクセス処理が必ずしも正しい順序で実行されるとは限らず、そのような場合でも、本実施の形態の監視装置２００であれば、メモリアクセス処理の実行順序を監視することができる点について説明する。
【０１１７】
図２２は監視対象プログラム３内の各系列の実行順序の一例を示す説明図である。各系列Ｘ、Ｙは、モジュールＸ、Ｙと考えることができる。図２２の例では、系列Ｙ（モジュールＹ）が実行された後、その次に系列Ｘ（モジュールＸ）が実行され、さらにその後に系列Ｙ（モジュールＹ）が実行されるものとし、正しい実行順序は、系列Ｙ、Ｘ、Ｙの順序であるとする。なお、特許文献１のような従来の装置では、図２２に例示するような各モジュールの実行順序は監視することができる。
【０１１８】
図２３は監視テーブル４の各系列Ｘ、Ｙの順序情報の一例を示す説明図である。図２３Ａは系列Ｘ内のメモリアクセス用Ｉ／Ｆの順序を定義してあり、ＩＤ＝１、２、３、４に対応するメモリアクセス用Ｉ／Ｆがこの順序で実行される。ＩＤ＝４（末尾ＩＤ）のメモリアクセス用Ｉ／Ｆが実行された後は、ＩＤ＝１（先頭ＩＤ）のメモリアクセス用Ｉ／Ｆから同様の順序で実行が繰り返される。
【０１１９】
図２３Ｂは系列Ｙ内のメモリアクセス用Ｉ／Ｆの順序を定義してあり、ＩＤ＝１、２、３に対応するメモリアクセス用Ｉ／Ｆがこの順序で実行される。ＩＤ＝３（末尾ＩＤ）のメモリアクセス用Ｉ／Ｆが実行された後は、ＩＤ＝１（先頭ＩＤ）のメモリアクセス用Ｉ／Ｆから同様の順序で実行が繰り返される。
【０１２０】
図２４はメモリアクセス順序判定部２２２で判定したメモリアクセス用Ｉ／Ｆの実行順序の一例を示す説明図である。図２４Ａの場合、メモリアクセス順序判定部２２２が順次特定（検出）した位置情報内のＩＤは、ＩＤ＝１、２、３、４、１、…であり、図２３で例示した監視テーブル４内の実行順序と一致しているので、メモリアクセス用Ｉ／Ｆの実行順序は正しいと判定することができる。
【０１２１】
一方、図２４Ｂの場合、メモリアクセス順序判定部２２２が順次特定（検出）した位置情報内のＩＤは、ＩＤ＝１、２、４であり、図２３で例示した監視テーブル４内の実行順序と一致しないので、メモリアクセス用Ｉ／Ｆの実行順序は誤っていると判定することができる。このように、本実施の形態の監視装置２００によれば、図２２に示すように、仮に各モジュールが正しい順序で実行されているとしても、モジュール内のメモリアクセス処理が所定の順序で実行されていないときは、実行順序に関わるエラーが発生したことを判定することができる。
【０１２２】
対応決定部２２３は、監視テーブル４に格納された順序情報のＩＤ、及びＩＤ特定部２２１で特定した順序情報のＩＤに基づいて、通知予定ＩＤの値を更新する。通知予定ＩＤは、現在実行しているメモリアクセス用Ｉ／Ｆの次に実行されるメモリアクセス用Ｉ／ＦのＩＤである。例えば、メモリアクセス用Ｉ／ＦのＩＤが定数Ｃ（例えば、１）ずつ増加する連番とし、現在のＩＤに定数Ｃを加算したＩＤを通知予定ＩＤとすることができる。
【０１２３】
また、対応決定部２２３は、メモリアクセス用Ｉ／Ｆの実行順序に誤りがある場合、誤りの内容に応じて、対応内容を決定し、決定した対応内容をエラー処理部２３へ出力する。対応内容は、例えば、実行順序が誤っていると判定されたアクセス処理の前段の処理であって、所定のポイントからの再度実行（リトライ）を行うとともに、実行順序に誤りが発生したことを示すエラーログを記録する。また、別の対応内容としては、例えば、実行順序が誤っていると判定された時点でモジュールの実行を一旦停止し、実行順序に誤りが発生したことを通知する。
【０１２４】
エラー処理部２３は、対応決定部２２３で決定した対応内容の処理を行う。上述の対応内容の例では、エラー処理部２３は、再度実行（リトライ）処理及びエラーログの記録処理を行う。あるいはモジュールの実行を停止する処理及びエラーの発生を通知する処理を行う。
【０１２５】
次に、本実施の形態の監視装置２００の動作について説明する。図２５は本実施の形態の監視装置２００による順序情報の特定処理の手順の一例を示すフローチャートである。なお、以下の説明では便宜上処理の主体をマイコン２０とする。
【０１２６】
マイコン２０は、メモリアクセス処理が通知した監視位置情報を取得する（Ｓ１０１）。すなわち、実行部２１又は監視用コードが検出したメモリへのアクセス処理によるメモリアクセスに関する監視位置情報を取得する。マイコン２０は、取得した監視位置情報に対応する順序情報（系列、ＩＤ）を監視テーブル４にて検索する（Ｓ１０２）。
【０１２７】
マイコン２０は、監視位置情報内の命令コードのアドレスに対応する順序情報（系列、ＩＤ）が監視テーブル４内にあるか否かを判定し（Ｓ１０３）、対応する順序情報がある場合（Ｓ１０３でＹＥＳ）、当該順序情報（系列、ＩＤ）を監視部２２へ出力し（Ｓ１０４）、処理を終了する。
【０１２８】
ステップＳ１０３で、対応する順序情報がない場合（Ｓ１０３でＮＯ）、マイコン２０は、メモリアクセス処理でアクセスするメモリアドレス（メモリ領域）、アクセス処理の内容、書込み処理の場合の書込み値に対応する順序情報(系列、ＩＤ)が監視テーブル４内にあるか否かを判定する（Ｓ１０５）。
【０１２９】
対応する順序情報がある場合（Ｓ１０５でＹＥＳ）、マイコン２０は、ステップＳ１０４の処理を行い、対応する順序情報がない場合（Ｓ１０５でＮＯ）、メモリアクセス処理に対応する順序情報がない旨の情報を監視部２２へ出力し（Ｓ１０６）、処理を終了する。なお、図２５の処理は、メモリアクセス処理が実行される都度行われる。
【０１３０】
図２６は本実施の形態の監視装置２００による監視処理の手順の一例を示すフローチャートである。マイコン２０は、図２５に例示の処理で出力された順序情報（系列、ＩＤ）を取得する（Ｓ１１０）。取得した順序情報は通知ＩＤである。取得した順序情報と予定順序情報（系列、ＩＤ）が一致するか否かを判定する（Ｓ１１１）。予定順序情報は、対応決定部２２３が更新する通知予定ＩＤである。
【０１３１】
取得した順序情報（通知ＩＤ）と予定順序情報（通知予定ＩＤ）が一致する場合（Ｓ１１１でＹＥＳ）、マイコン２０は、メモリアクセス処理は正しい順序で実行されていると判定し（Ｓ１１２）、取得した順序情報(通知ＩＤ)は、末尾の順序情報（末尾ＩＤ）であるか否かを判定する（Ｓ１１３）。
【０１３２】
取得した順序情報(通知ＩＤ)が末尾の順序情報（末尾ＩＤ）でない場合（Ｓ１１３でＮＯ）、マイコン２０は、次の順序情報を予定順序情報とし（Ｓ１１４）、処理を終了する。すなわち、当該系列において通知された通知ＩＤに定数Ｃを加算した値を通知予定ＩＤに設定する。
【０１３３】
取得した順序情報(通知ＩＤ)が末尾の順序情報（末尾ＩＤ）である場合（Ｓ１１３でＹＥＳ）、マイコン２０は、次の順序情報を先頭順序情報とし（Ｓ１１５）、処理を終了する。すなわち、当該系列の先頭ＩＤを通知予定ＩＤに設定する。
【０１３４】
ステップＳ１１１で取得した順序情報（通知ＩＤ）と予定順序情報（通知予定ＩＤ）が一致しない場合（Ｓ１１１でＮＯ）、マイコン２０は、取得した順序情報に応じたエラー処理を決定し（Ｓ１１６）、決定したエラー処理を実行して（Ｓ１１７）、ステップＳ１１３以降の処理を行う。
【０１３５】
上述のように、本実施の形態の監視装置２００によれば、プログラム内の複数のメモリアクセス処理の実行順序を監視することができる。特に、モジュールが正しい順序で行われている場合に、いずれかのモジュール内のメモリアクセス処理が誤った順序で行われたときでも、かかるメモリアクセス処理の実行順序を的確に監視して判定することができる。
【０１３６】
また、上述のように、監視位置情報（固有情報）は、監視対象のアクセス処理に対応する機械語のメモリアドレスを含む。機械語は、オブジェクトコード、命令コード、目的コードとも称される。機械語（命令コード）のアドレスは、メモリのアクセス処理の呼び出し元のアドレスとみなすことができる。監視用プログラム内の監視対象のアクセス処理それぞれを識別（区別）することができる固有の情報として機械語のアドレスを用いるので、監視対象のアクセス処理の実行順序を正確に監視することができる。
【０１３７】
また、上述のように、監視位置情報（固有情報）は、メモリからの読み込み処理若しくはメモリへの書き込みの処理の種別、アクセスするメモリのアドレス又はメモリへの書き込み値に関する情報を含む。これにより、メモリからの読込みに関する固有の情報又はメモリへの書込みに関する固有の情報が判れば、アクセス処理の順序情報が特定され、当該アクセス処理の実行順序を監視することができる。
【０１３８】
次に、本実施の形態の監視装置２００によるメモリアクセス処理の実行順序の他の判定例について説明する。
【０１３９】
図２７は図１３に例示の関連テーブル２ｂに基づく監視テーブルを用いた場合の判定例を示す説明図である。図１３には、メモリアクセス用Ｉ／Ｆの指定機能が設定された場合の関連データベースが例示されている。ここで、指定機能とは、同じ読出し又は書込み処理であっても複数の異なる機能のいずれかを指定するものであり、例えば、読出すデータのサイズ、あるいは書込むデータのサイズによってメモリアクセス用Ｉ／Ｆを使い分けることができる。
【０１４０】
図１３の例では、データのサイズが８ビットである場合、Ｗｒｉｔｅ０８又はＲｅａｄ０８を用い、データのサイズが１６ビットである場合、Ｗｒｉｔｅ１６又はＲｅａｄ１６を用いる。また、この場合、Ｗｒｉｔｅ０８、Ｒｅａｄ０８、Ｗｒｉｔｅ１６、Ｒｅａｄ１６には、それぞれ異なる命令コードアドレスが対応する。
【０１４１】
図１３の例のような関連テーブル２ｂで実行順序が定義されたプログラムでは、図２７Ａに示すように、系列Ｘについて、ＩＤ＝１、２、１、２、…の順序で位置情報が特定された場合、メモリアクセス処理は正しい順序で行われていると判定することができる。
【０１４２】
しかし、図２７Ｂに示すように、系列ＸのＩＤ＝１、系列ＹのＩＤ＝２の順序で位置情報が特定された場合には、例えば、８ビット用の読出し用Ｉ／Ｆで読出されるべきメモリ領域が、１６ビット用の読出し用Ｉ／Ｆで読出されたことになり、メモリアクセス処理は誤った順序で行われていると判定することができ、実行順序に関するエラーを検出してエラー処理を行うことができる。
【０１４３】
図２８は図１５に例示の関連テーブル２ｃに基づく監視テーブルを用いた場合の判定例を示す説明図である。図１５には、順序情報の中に繰返先頭ＩＤが系列Ｘ、Ｙ毎に設けられた関連テーブル２ｃが例示されている。
【０１４４】
図１５の例のような関連テーブル２ｃで実行順序が定義されたプログラムでは、図２８Ａに示すように、系列Ｘについて、ＩＤ＝１、２、３、４、２、…の順序で位置情報が特定された場合、繰返先頭ＩＤ＝２でメモリアクセス処理が繰り返されているので、メモリアクセス処理は正しい順序で行われていると判定することができる。
【０１４５】
しかし、図２８Ｂに示すように、例えば、ＩＤ＝１、２、３、４、１の順序で位置情報が特定された場合、繰返先頭ＩＤ＝２でメモリアクセス処理が繰り返されていないので、メモリアクセス処理は誤った順序で行われていると判定することができ、実行順序に関するエラーを検出してエラー処理を行うことができる。
【０１４６】
図２９は図１８に例示の関連テーブル２ｄに基づく監視テーブルを用いた場合の判定例を示す説明図である。図１８には、通知予定ＩＤが設定された場合の関連データベース２ｄが例示されている。
【０１４７】
図１８の例のような関連テーブル２ｄで実行順序が定義されたプログラムでは、図２９Ａに示すように、系列Ｘについて、ＩＤ＝１、２、４、１、…の順序で位置情報が特定された場合、ＩＤ＝１の通知予定ＩＤがＩＤ＝２又は３であり、ＩＤ＝２の通知予定ＩＤがＩＤ＝４であり、ＩＤ＝４の通知予定ＩＤがＩＤ＝１であり、通知予定ＩＤで特定された順序でメモリアクセス処理が実行されているので、メモリアクセス処理は正しい順序で行われていると判定することができる。
【０１４８】
しかし、図２９Ｂに示すように、例えば、ＩＤ＝１、２、４、３の順序で位置情報が特定された場合、ＩＤ＝４の通知予定ＩＤがＩＤ＝１であるのに、ＩＤ＝４の次にＩＤ＝３のメモリアクセス処理が行われているため、メモリアクセス処理は誤った順序で行われていると判定することができ、実行順序に関するエラーを検出してエラー処理を行うことができる。
【０１４９】
図３０は図１９に例示の関連テーブル２ｅに基づく監視テーブルを用いた場合の判定例を示す説明図である。図１９には、デッドライン（閾値時間）が設けられた場合の関連テーブル２ｅが例示されている。
【０１５０】
図１９の例のような関連テーブル２ｅで実行順序が定義されたプログラムでは、図３０Ａに示すように、系列Ｘについて、ＩＤ＝２のメモリアクセス処理後、例えば、５０ｍｓ（＜閾値時間である１００ｍｓ）後にＩＤ＝３のメモリアクセス処理が実行されているので、メモリアクセス処理は正しいと判定することができる。
【０１５１】
しかし、図３０Ｂに示すように、例えば、系列Ｘについて、ＩＤ＝２のメモリアクセス処理後、例えば、３００ｍｓ（＞閾値時間である１００ｍｓ）後にＩＤ＝３のメモリアクセス処理が実行された場合には、ＩＤ＝２のメモリアクセス処理が開始された後、ＩＤ＝３のメモリアクセス処理が開始されるまでの経過時間がデッドライン（閾値時間）を超えているので、メモリアクセス処理は誤っていると判定することができ、エラー処理を行うことができる。
【０１５２】
上述の監視装置２００は、ＣＰＵ、ＲＡＭなどを備えたコンピュータを用いて実現することもできる。すなわち、図２５及び図２６に示すような、各処理手順を定めたコンピュータプログラムを記録した記録媒体をコンピュータに備えられた記録媒体読取部で読み取り、読み取って得られたコンピュータプログラムをＲＡＭにロードし、コンピュータプログラムをＣＰＵで実行することにより、コンピュータ上で監視装置２００を実現することができる。
【０１５３】
開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１５４】
１  プログラム（ソースコード）
２、２ａ、２ｂ、２ｃ、２ｄ、２ｅ  関連テーブル
３  監視用コード挿入済プログラム（監視対象プログラム）
４  監視テーブル
１０  制御部
１４  監視対象特定部
１５  監視用コード生成部
２０  マイコン
２１  実行部
２２  監視部
２２１  ＩＤ特定部
２２２  メモリアクセス順序判定部
２２３  対応決定部
２３  エラー処理部
２４、２５  記憶部
【図１】
2014026347.tif 000003
【図２】
2014026347.tif 000004
【図３】
2014026347.tif 000005
【図４】
2014026347.tif 000006
【図５】
2014026347.tif 000007
【図６】
2014026347.tif 000008
【図７】
2014026347.tif 000009
【図８】
2014026347.tif 000010
【図９】
2014026347.tif 000011
【図１０】
2014026347.tif 000012
【図１１】
2014026347.tif 000013
【図１２】
2014026347.tif 000014
【図１３】
2014026347.tif 000015
【図１４】
2014026347.tif 000016
【図１５】
2014026347.tif 000017
【図１６】
2014026347.tif 000018
【図１７】
2014026347.tif 000019
【図１８】
2014026347.tif 000020
【図１９】
2014026347.tif 000021
【図２０】
2014026347.tif 000022
【図２１】
2014026347.tif 000023
【図２２】
2014026347.tif 000024
【図２３】
2014026347.tif 000025
【図２４】
2014026347.tif 000026
【図２５】
2014026347.tif 000027
【図２６】
2014026347.tif 000028
【図２７】
2014026347.tif 000029
【図２８】
2014026347.tif 000030
【図２９】
2014026347.tif 000031
【図３０】
2014026347.tif 000032