(57)【要約】      （修正有）【課題】デバッガを使用しなくても制御プログラムの不具合の原因を特定できるとともに、フック関数を用意しなくても制御プログラムの不具合の解消を確認できる車載制御装置を提供する。【解決手段】車載制御装置１は、ＲＯＭ７とＲＡＭ６とＣＰＵ５とを備える。ＲＯＭは、周期制御処理と、周期制御処理を構成する一連の処理の中で複数の予め決められる特定処理が個別に実行されるたびに実行される割り込み処理とを含む、制御プログラムを記憶する。ＲＡＭは、拡張プログラムとして、周期制御処理において不具合を発見し、その不具合の原因を特定できる、第１拡張プログラム、および、処理部分の不具合を修正する前の制御プログラムに対して、不具合を修正した後の処理部分が追加され、修正前の処理部分の代わりに実行され、制御プログラムの不具合の解消を確認できる、第２拡張プログラムを記憶する。ＣＰＵは、制御プログラムおよび拡張プログラムを実行する。【選択図】図１
2019087118.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を周期的に制御するための周期制御処理と、前記周期制御処理を構成する一連の処理の中で複数の予め決められる特定処理が個別に実行されるたびに実行される割り込み処理とを含む制御プログラムを記憶するＲＯＭと、
拡張プログラムとして第１拡張プログラムおよび第２拡張プログラムを記憶するＲＡＭと、
前記制御プログラムおよび前記拡張プログラムを実行するＣＰＵと、
を備え、
前記ＣＰＵは、
前記特定処理を実行する際にアクセスする実行アドレスにアクセスしたことを検知して、割り込みを発生させるアクセス検知機能を備え、
前記アクセス検知機能によって発生した前記割り込みに応答して前記割り込み処理を実行させることで、前記周期制御処理で前記特定処理の実行後以降の処理を中断し、前記第１拡張プログラムまたは前記第２拡張プログラムを実行し、当該実行後に、前記周期制御処理で前記特定処理の実行後以降の処理を再開し、
前記第１拡張プログラムを実行させることで、前記特定処理の処理結果を前記ＲＡＭに記憶させるとともに、前記周期制御処理で前記特定処理の次に実行される次の特定処理の実行アドレスに前記ＣＰＵがアクセスしたことを前記アクセス検知機能が検知するように、前記アクセス検知機能を設定し、
前記第２拡張プログラムを実行させることで、前記周期制御処理で不具合が発生する原因である処理を修正した後の修正後処理を実行する
車載制御装置。
【請求項２】
前記アクセス検知機能は、ブレイクポイント機能によって構成され、
前記ＣＰＵは、前記ブレイクポイント機能を、前記実行アドレスに設定し、
前記ブレイクポイント機能は、前記実行アドレスに前記ＣＰＵがアクセスしたことを検知して、前記割り込みを発生させる
請求項１に記載の車載制御装置。
【請求項３】
前記アクセス検知機能は、第１メモリ保護機能および第２メモリ保護機能によって構成され、
前記ＣＰＵは、前記第１メモリ保護機能および前記第２メモリ保護機能を、前記実行アドレスに基づいたアドレス範囲に設定し、
前記第１メモリ保護機能および前記第２メモリ保護機能は、前記ＣＰＵがアクセスした前記実行アドレスが前記アドレス範囲外であることをもって、前記実行アドレスに前記ＣＰＵがアクセスしたことを検知して、前記割り込みを発生させる
請求項１に記載の車載制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムの実行結果に関する情報をＲＡＭから取得することができるように工夫された車載制御装置に関するものである。
【背景技術】
【０００２】
モータ駆動用インバータ、照明駆動用コンバータ等の制御を行う車載制御装置（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｏｌ  Ｕｎｉｔ；以下、「ＥＣＵ」と記す）は、モータ、照明機器等の制御対象のハウジング内に組み込まれ、機能部品として製品化される。
【０００３】
ＥＣＵは、各種制御処理を行ったり、他のＥＣＵと情報交換、協調動作等を行ったりするために、以下のように構成される。すなわち、ＥＣＵは、ＣＡＮ、ＦｌｅｘＲａｙ、Ｅｔｈｅｒｎｅｔ（登録商標）等の通信線に接続される他のＥＣＵ、各種ツール等との通信（以下、「外部通信」と記す）を行う機能を有するマイクロコンピュータ（以下、「マイコン」と記す）を備えて構成される。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Ｕｎｉｖｅｒｓａｌ  Ｍｅａｓｕｒｅｍｅｎｔ  ａｎｄ  Ｃａｌｉｂｒａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ、［平成２９年８月２５日検索］、インターネット  ＜ＵＲＬ  ：  ｈｔｔｐｓ：／／ｗｉｋｉ．ａｓａｍ．ｎｅｔ／ｄｉｓｐｌａｙ／ＳＴＡＮＤＡＲＤＳ／ＡＳＡＭ＋ＭＣＤ−１＋ＸＣＰ＞
【非特許文献２】Ｂｙｐａｓｓｉｎｇ−Ｅｘｔｅｒｎａｌｌｙ  ｏｒ  Ｄｉｒｅｃｔｌｙ  ｏｎ  ｔｈｅ  ＥＣＵ、［平成２９年８月２５日検索］、インターネット  ＜ＵＲＬ  ：  ｈｔｔｐｓ：／／ｗｗｗ．ｄｓｐａｃｅ．ｃｏｍ／ｅｎ／ｐｕｂ／ｈｏｍｅ／ｐｒｏｄｕｃｔｓ／ｓｙｓｔｅｍｓ／ｆｕｎｃｔｐ／ｂｙｐａｓｓｉｎｇ．ｃｆｍ＞
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、マイコンが実行する制御プログラムの開発では、製品に課せられた要求を満たすように、処理を追加したり変更したり削除したりして、その結果が妥当であるか否かを確認するための試験が行われる。また、この開発では、要求を満足しない処理、意図しない振る舞い、誤り等（以下、「不具合」と記す）を繰り返し修正することが行われる。
【０００６】
制御プログラムの開発初期において、制御プログラムの実用性が十分確認できない段階では、ＥＣＵを制御対象と組み合わせることなく、ＥＣＵ単体で開発が行われる。ＥＣＵ単体で開発が行われる場合、ＥＣＵのマイコンにデバッガを常に接続した状態で、その開発を進めることができる。制御プログラムに不具合が発見された場合、その不具合の原因の調査は、以下のように進められる。すなわち、その調査は、デバッガによって提供されるソースレベルデバッグ機能を利用することによって、制御プログラムのソースコードの各行において意図通りの実行結果となっているか否かを確認しながら進められる。
【０００７】
制御プログラムは、その実用性が十分確認できたところで、制御対象と組み合わされて統合試験が行われる。この段階では、ＥＣＵは、制御対象のハウジング内に組み込まれることが多く、ＥＣＵのマイコンにデバッガを接続することが困難な場合が多い。そこで、ＥＣＵが通常備える外部通信機能に対して、制御プログラムの処理データ、状態を示す変数等の実行時データの送信機能を追加する。この送信機能によって送信される実行時データを受信して観測することで、制御プログラムが正常に動作しているか否かを確認する。
【０００８】
上述の制御プログラムの実行時データは、例えば、ＡＳＡＭ（Ａｓｓｏｃｉａｔｉｏｎ  ｆｏｒ  Ｓｔａｎｄａｒｄｉｓａｔｉｏｎ  ｏｆ  Ａｕｔｏｍａｔｉｏｎ  ａｎｄ  Ｍｅａｓｕｒｉｎｇ  Ｓｙｓｔｅｍｓ）が規格化しているＣＡＮ  Ｃａｌｉｂｒａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ、またはＵｎｉｖｅｒｓａｌ  Ｍｅａｓｕｒｅｍｅｎｔ  ａｎｄ  Ｃａｌｉｂｒａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ（以下、「ＸＣＰ」と記す）に基づいたプロトコルを適用して送信される（例えば、非特許文献１参照）。
【０００９】
非特許文献１によれば、ＸＣＰを適用するＥＣＵは、制御プログラムを実行するＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）がアクセス可能な各アドレスが保持する値の読み出しが可能であり、さらに、アドレスがＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）または周辺機能レジスタである場合、そのアドレスに指定の値を書き込むことができる。この場合、単位時間あたりに取得可能な制御プログラムの実行時データの数および量は、ＥＣＵの外部通信機能の通信速度、データ処理速度等の性能によって制限される。
【００１０】
ＸＣＰの主な用途として、例えば、制御プログラムが算出する制御目標値が制御対象にとって最適でない場合、その算出に使用する各種制御パラメータを繰り返し調整する工程（以下、「キャリブレーション」と記す）に使用される。
【００１１】
また、ＸＣＰを適用するＥＣＵは、上述のＲＡＭだけでなく、制御プログラム、データ等を記憶するフラッシュメモリを書き変えるＰＲＯＧＲＡＭコマンドに対応することができる。このコマンドを利用すれば、ＥＣＵの外部通信機能を介してフラッシュメモリに記憶された制御プログラムまたはデータの一部または全部を書き換えることができる。さらに、ＸＣＰに定義されていないコマンドをユーザーが追加定義して使用することも可能である。
【００１２】
上述の統合試験において、制御プログラムに不具合が発見された場合、制御プログラムの開発者は、上述の実行時データを取得して解析し、制御プログラムの不具合の原因を特定しなければならない場合がある。この場合、制御プログラム開発者は、制御プログラムの実行時データの一部しか取得することができず、マイコンにデバッガを接続した場合に提供される制御プログラムのソースレベルデバッグ機能を利用することができない。そのため、制御プログラムの不具合の原因の調査が困難であるという問題がある。
【００１３】
したがって、制御プログラム開発者は、制御プログラムの実行時データの一部に基づき、制御プログラムの不具合の原因を推定し、修正した制御プログラムをＸＣＰ等の手段を用いてＥＣＵに書き込み、再度の統合試験を行うことになる。
【００１４】
ただし、制御プログラムの不具合の原因の推定が正しくない場合、その不具合が完全に解消できないことがある。その場合、制御プログラムの不具合の真の原因が特定されるまで、上述の制御プログラムの実行時データを取得する工程から、統合試験を行う工程までの開発サイクルを繰り返すことになる。その結果、制御プログラムの開発に時間がかかるという問題がある。
【００１５】
上述したＸＣＰのＰＲＯＧＲＡＭコマンドを利用すれば、ＥＣＵのフラッシュメモリを書き換えて、不具合を修正した後の制御プログラムに更新することができる。しかしながら、上述したように、制御プログラムの不具合の原因の推定が正しくない場合、不具合の原因を正しく推定するために、不具合が発生する制御プログラムの実行時データを取得する工程に戻る必要がある。そのため、修正後の制御プログラムを修正前の状態に戻す必要があることが多い。このようなことから、修正後の制御プログラムを修正前の状態に戻すことなく、不具合の原因を特定し、修正の効果を確認できることが望ましい。
【００１６】
上述の開発サイクル、特に制御プログラムのアルゴリズムを修正する工程の繰り返しに要する時間を短縮するための手段として、例えば、Ｂｙｐａｓｓｉｎｇが従来から知られている（例えば、非特許文献１、２参照）。
【００１７】
非特許文献２によれば、元のプログラム処理を実行する直前に、フック関数と呼ばれる分岐処理関数を設け、このフック関数内で元の処理、または後で作成した制御パラメータを変更した処理を選択して実行する。これにより、ＥＣＵのＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）に記憶される制御プログラム全体を書き変えることなく、変更が必要な処理だけを変更後の処理に切り替えてプログラムを実行させることが可能である。
【００１８】
なお、上述のＢｙｐａｓｓｉｎｇの実装方法としては、以下の２通りの方法が知られている（例えば、非特許文献２参照）。すなわち、第１方法として、フック関数がＸＣＰおよび外部通信を介して、処理に使用するパラメータ、すなわち関数の引数を、例えばパーソナルコンピュータ等の外部に送信し、外部で処理を実行した結果をＥＣＵに返信するＥｘｔｅｒｎａｌ  Ｂｙｐａｓｓｉｎｇが挙げられる。第２方法として、予めＥＣＵのＲＡＭに記憶した変更後のプログラム部分にフック関数内から分岐して実行するＯｎ−ｔａｒｇｅｔ  Ｂｙｐａｓｓｉｎｇが挙げられる。特に、ＥＣＵでは、制御処理の周期が数十μ秒と短い場合があり、Ｅｘｔｅｒｎａｌ  Ｂｙｐａｓｓｉｎｇでは、外部通信が時間的なボトルネックとなり、その周期以内に外部通信から処理結果を受信することが困難である。したがって、ＥＣＵでは、ＥＣＵ内で処理を実行できるＯｎ−ｔａｒｇｅｔ  Ｂｙｐａｓｓｉｎｇが必要になることがある。
【００１９】
制御パラメータのキャリブレーションを行う場合、制御パラメータの調整が必要な処理の箇所が分かっているので、予め必要な処理箇所だけにフック関数を追加することができる。
【００２０】
しかしながら、制御プログラムのアルゴリズムに不具合が発生する場合、その発生箇所を予め予測してフック関数を用意しておくことが困難である。したがって、任意の箇所で発生する制御プログラムの不具合に対して予め対応可能とするためには、例えば、全ての関数にフック関数を用意する必要がある。この場合、制御プログラムの一部で発生する不具合に対応するために、制御プログラム全域にわたってフック関数を作成するのは非効率であるという問題がある。
【００２１】
本発明は、上述のような課題を解決するためになされたものであり、デバッガを使用しなくても制御プログラムの不具合の原因を特定することができるとともに、フック関数を用意しなくても制御プログラムの不具合の解消を確認することができる車載制御装置を得ることを目的とする。
【課題を解決するための手段】
【００２２】
本発明における車載制御装置は、制御対象を周期的に制御するための周期制御処理と、周期制御処理を構成する一連の処理の中で複数の予め決められる特定処理が個別に実行されるたびに実行される割り込み処理とを含む制御プログラムを記憶するＲＯＭと、拡張プログラムとして第１拡張プログラムおよび第２拡張プログラムを記憶するＲＡＭと、制御プログラムおよび拡張プログラムを実行するＣＰＵと、を備え、ＣＰＵは、特定処理を実行する際にアクセスする実行アドレスにアクセスしたことを検知して、割り込みを発生させるアクセス検知機能を備え、アクセス検知機能によって発生した割り込みに応答して割り込み処理を実行させることで、周期制御処理で特定処理の実行後以降の処理を中断し、第１拡張プログラムまたは第２拡張プログラムを実行し、当該実行後に、周期制御処理で特定処理の実行後以降の処理を再開し、第１拡張プログラムを実行させることで、特定処理の処理結果をＲＡＭに記憶させるとともに、周期制御処理で特定処理の次に実行される次の特定処理の実行アドレスにＣＰＵがアクセスしたことをアクセス検知機能が検知するように、アクセス検知機能を設定し、第２拡張プログラムを実行させることで、周期制御処理で不具合が発生する原因である処理を修正した後の修正後処理を実行するものである。
【発明の効果】
【００２３】
本発明によれば、デバッガを使用しなくても制御プログラムの不具合の原因を特定することができるとともに、フック関数を用意しなくても制御プログラムの不具合の解消を確認することができる車載制御装置を得ることができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態１におけるＥＣＵの構成を示すブロック図である。
【図２】本発明の実施の形態１におけるＣＰＵに具備される機能を示すブロック図である。
【図３】本発明の実施の形態１におけるＲＡＭに設けられる制御プログラム拡張部を示すブロック図である。
【図４】本発明の実施の形態１におけるＣＰＵが実行する拡張プログラムのコマンドの定義の一例を示す表である。
【図５】本発明の実施の形態１におけるＲＯＭに記憶される制御プログラムを示すブロック図である。
【図６】本発明の実施の形態１におけるＣＰＵが実行する制御プログラムの周期制御処理を示すフローチャートである。
【図７】本発明の実施の形態１におけるＣＰＵが実行する制御プログラムの割り込み処理を示すフローチャートである。
【図８】本発明の実施の形態１におけるＣＰＵが実行する制御プログラムの割り込み処理で呼び出されるサブルーチンを示すフローチャートである。
【図９】本発明の実施の形態１におけるＣＰＵが実行する制御プログラムの割り込み処理で呼び出されるサブルーチンのコマンドの定義の一例を示す表である。
【図１０】本発明の実施の形態１におけるＣＰＵが実行する制御プログラムの割り込み処理で呼び出されるサブルーチンのコマンドの定義の一例を示す表である。
【図１１】本発明の実施の形態１におけるＣＰＵが実行する制御プログラムの割り込み処理で呼び出されるサブルーチンを示すフローチャートである。
【発明を実施するための形態】
【００２５】
以下、本発明による車載制御装置を、好適な実施の形態にしたがって図面を用いて説明する。なお、図面の説明においては、同一部分または相当部分には同一符号を付し、重複する説明を省略する。
【００２６】
実施の形態１．
図１は、本発明の実施の形態１におけるＥＣＵ１の構成を示すブロック図である。図１では、ＥＣＵ１は、制御対象の一例であるモータ１１の制御を実行するとともに、外部通信線１２によって外部と通信するように構成される場合を例示している。
【００２７】
ここで、後述するＥＣＵ１の構成によって、ＥＣＵ１によって制御プログラム内の周期制御処理において不具合を発見し、その不具合の原因を特定することができる。周期制御処理は、例えば５０μ秒といった短い周期で実行される。また、ＥＣＵ１の構成によって、処理部分の不具合を修正する前の制御プログラムに対して、その不具合を修正した後の処理部分が追加され、修正前の処理部分の代わりに、追加した処理部分が実行される。その結果、制御プログラムの不具合の解消を確認することができる。
【００２８】
図１において、ＥＣＵ１は、入力回路２、マイコン３および駆動回路１０を備え、モータ１１を制御するとともに、外部通信線１２と接続される。マイコン３は、入出力機能（以下、Ｉ／Ｏと記す）４と、ＣＰＵ５と、ＲＡＭ６と、ＲＯＭ７と、タイマ８と、外部通信機能９とを備える。
【００２９】
ここで、本実施の形態１のＥＣＵ１の構成では、マイコン３の外部通信機能９に対して例えばＸＣＰに基づいたプロトコルを追加する。これにより、外部通信から指定のメモリアドレスのアクセスを検知するための設定が行われ、後述する図９および図１０に示す指定のコマンドとその引数がＲＡＭ６に記憶される。
【００３０】
入力回路２は、外部からの信号、および制御対象であるモータ１１に設けられる各種センサからの信号を電圧として読み取る。Ｉ／Ｏ４は、デジタル信号の入出力を行い、入力回路２によって読み取られた電圧のマイコン３内への取り込みを行い、駆動回路１０への制御信号の出力を行う。
【００３１】
ＣＰＵ５は、周知のアーキテクチャを用いたマイクロプロセッサであり、ＲＯＭ７に記憶される後述する制御プログラム７０を実行可能に構成される。また、ＣＰＵ５は、制御プログラム７０の実行中に割り込みが発生した場合、その割り込みに応じた処理を実行する。なお、ＣＰＵ５として適用されるマイクロプロセッサによっては、割り込みを例外と呼ぶことがあるが、本実施の形態１では、両者を特に区別せず、単に割り込みと呼ぶこととする。
【００３２】
続いて、ＣＰＵ５に具備される機能について、図２を参照しながら説明する。図２は、本発明の実施の形態１におけるＣＰＵ５に具備される機能を示すブロック図である。
【００３３】
図２に示すように、ＣＰＵ５は、ブレイクポイント機能（以下、「ＢＰ」と記す）５１と、２つのメモリ保護機能（以下、「ＭＰＵ」と記す）、すなわち、第１ＭＰＵ５２および第２ＭＰＵ５３によって構成されるメモリ保護機能組とを備える。
【００３４】
なお、ＣＰＵ５に具備されるＢＰ５１の数は１つ以上必要であり、ＣＰＵ５に具備されるメモリ保護機能組の組数は１組以上必要である。
【００３５】
ＢＰ５１は、ＣＰＵ５のレジスタまたはＣＰＵ５がアクセス可能なメモリ空間に配置されている。ＣＰＵ５は、ＲＯＭ７に記憶されるプログラムを実行することで、ＢＰ５１を、特定のメモリアドレスに設定可能である。ＢＰ５１は、ＣＰＵ５がアクセスするメモリアドレスを監視し、設定されたアドレスにＣＰＵ５がアクセスすれば、設定されたアドレスにＣＰＵ５がアクセスしたことをＣＰＵ５に通知する割り込み（以下、「ＢＰ割り込み」と記す）を発生させる。つまり、ＢＰ５１は、ＣＰＵ５が特定のアドレスにアクセスしたことを検知することができる。
【００３６】
ＣＰＵ５がＢＰ５１を操作できない場合、すなわち、ＢＰ５１を使用できない場合、ＢＰ５１の代わりに、第１ＭＰＵ５２および第２ＭＰＵ５３が使用される。ＣＰＵ５は、Ｉ／Ｏ４、ＲＡＭ６、ＲＯＭ７、タイマ８および外部通信機能９にアクセスすることができれば、単一コアでもあっても、複数コアであってもよい。
【００３７】
第１ＭＰＵ５２および第２ＭＰＵ５３は、ＣＰＵ５がアクセスするメモリアドレスが、第１ＭＰＵ５２および第２ＭＰＵ５３が設定されるアドレス範囲内か否かを監視する。ＣＰＵ５は、第１ＭＰＵ５２および第２ＭＰＵ５３を、それぞれ、アドレス範囲の下限値と上限値に設定可能である。第１ＭＰＵ５２および第２ＭＰＵ５３は、ＣＰＵ５がアクセスするメモリアドレスが、設定されたアドレス範囲外であれば、設定されたアドレス範囲外のアドレスにＣＰＵ５がアクセスしたことをＣＰＵ５に通知する割り込み（以下、「ＭＰＵ割り込み」と記す）を発生させる。
【００３８】
本実施の形態１では、ＢＰ５１を使用できない場合、第１ＭＰＵ５２および第２ＭＰＵ５３の上述の機能を利用して、ＣＰＵ５が特定のメモリアドレスにアクセスしたことを検知する。例えば、ＣＰＵ５が或るアドレスＡにアクセスしたことを検知する場合、ＣＰＵ５は、ＣＰＵ５がアクセス可能なメモリ空間の先頭からアドレスＡ−１までの範囲に第１ＭＰＵ５２を設定し、アドレスＡ＋１からＣＰＵ５がアクセス可能なメモリ空間の末尾までの範囲に第２ＭＰＵ５３を設定する。その後、ＣＰＵ５は、第１ＭＰＵ５２と第２ＭＰＵ５３の機能を有効化する。
【００３９】
このように、ＣＰＵ５は、第１ＭＰＵ５２および第２ＭＰＵ５３を上述のアドレス範囲に設定し、第１ＭＰＵ５２と第２ＭＰＵ５３の機能を有効化する。その後、ＣＰＵ５がアドレスＡをアクセスすれば、アドレスＡが、第１ＭＰＵ５２および第２ＭＰＵ５３が設定されたアドレス範囲外のアドレスであるので、ＭＰＵ割り込みが発生する。つまり、第１ＭＰＵ５２および第２ＭＰＵ５３は、ＣＰＵ５がアドレスＡ、すなわち特定のアドレスにアクセスしたことを検知することができる。
【００４０】
図１の説明に戻り、駆動回路１０は、マイコン３から入力される制御量に従って、モータ１１を駆動する。外部通信機能９は、外部通信線１２に接続される。外部通信線１２は、ＣＡＮ、ＣＡＮ  ＦＤ、ＦｌｅｘＲａｙ、Ｅｔｈｅｒｎｅｔ（登録商標）等の、ＥＣＵで使用される一般的な通信線である。なお、本実施の形態１では、モータ１１を制御するＥＣＵ１に対して本発明を適用する場合を例示しているが、これに限定されず、モータ１１以外の別の制御対象を制御するＥＣＵに対しても本発明が適用可能である。例えば、駆動回路１０としてコンバータを用いて、制御対象をモータ１１からＬＥＤに代えた場合、ＬＥＤの照度制御についても、モータ１１の駆動制御と同様に、短い周期で制御処理が行われる。また、外部通信機能９の構成について、特に限定されず、例えば、上述した通信方式を組み合わせて使用される構成、または、同一の通信方式を複数使用される構成が考えられる。さらに、ＥＣＵ１に対して配線を追加することが可能な場合、マイコン３に具備される例えばＵＡＲＴ、ＳＰＩ等の各種シリアル通信、汎用デジタル入出力（ＧＰＩＯ）等を、外部通信機能９として適用することができる。
【００４１】
続いて、ＲＡＭ６に設けられる制御プログラム拡張部６０について、図３を参照しながら説明する。図３は、本発明の実施の形態１におけるＲＡＭ６に設けられる制御プログラム拡張部６０を示すブロック図である。
【００４２】
ＣＰＵ５は、ＲＡＭ６にアクセス可能である。図３に示すように、ＲＡＭ６に設けられる制御プログラム拡張部６０は、サブルーチン開始アドレス記憶変数６１１を有する拡張プログラム開始アドレス記憶部６１と、識別番号記憶配列６２１、第１引数記憶配列６２２、第２引数記憶配列６２３およびコマンド実行結果記憶領域６２４を有するコマンド記憶部６２と、プログラム記憶領域６３１を有する拡張プログラム記憶部６３とを備える。
【００４３】
拡張プログラム開始アドレス記憶部６１において、サブルーチン開始アドレス記憶変数６１１には、後述するサブルーチンの開始アドレスが記憶される。ここで、サブルーチンは、制御プログラム７０を拡張するプログラムの処理単位であり、呼び出し側に処理を返すリターン命令で処理を終えるものであり、例として、Ｃ言語では関数と呼ばれる処理単位を意味するものである。
【００４４】
サブルーチン開始アドレス記憶変数６１１に記憶される有効なアドレスは、例えばプログラム記憶領域６３１に記憶されるサブルーチンの開始アドレス、ＲＯＭ７に記憶されるサブルーチンの開始アドレス等である。
【００４５】
コマンド記憶部６２において、識別番号記憶配列６２１には、コマンドを識別するための識別番号が記憶される。第１引数記憶配列６２２には、識別番号に対応するコマンドを実行するために必要な１つ目の引数情報が第１引数として記憶される。第２引数記憶配列６２３には、識別番号に対応するコマンドを実行するために必要な２つ目の引数情報が第２引数として記憶される。コマンド実行結果記憶領域６２４には、識別番号に対応するコマンドを実行した結果が記憶される。
【００４６】
ここで、上述のコマンドの一例について、図４を参照しながら説明する。図４は、本発明の実施の形態１におけるＣＰＵ５が実行する拡張プログラムのコマンドの定義の一例を示す表である。
【００４７】
図４では、識別番号記憶配列６２１に記憶される識別番号が示され、さらに、サブルーチンの振る舞いが、識別番号に対応するコマンドの定義として示されている。また、第１引数記憶配列６２２に記憶される第１引数の用途と、第２引数記憶配列６２３に記憶される第２引数の用途は、図４に示すコマンドの定義から分かる。
【００４８】
識別番号記憶配列６２１、第１引数記憶配列６２２および第２引数記憶配列６２３を一組の記憶配列として、複数組の記憶配列をコマンド記憶部６２に記憶することで、複数のコマンドをコマンド記憶部６２に記憶することができる。なお、図３では、前記一組の記憶配列を個々の配列を用いて例示しているが、プログラムの実装の形態としては、例えばＣ言語で定義可能な構造体、Ｃ＋＋言語で定義可能なクラス等に識別番号記憶配列６２１、第１引数記憶配列６２２および第２引数記憶配列６２３の各要素を定義し、その構造体、クラス等の配列を用いてもよい。
【００４９】
続いて、ＲＯＭ７に記憶される制御プログラム７０について、図５を参照しながら説明する。図５は、本発明の実施の形態１におけるＲＯＭ７に記憶される制御プログラム７０を示すブロック図である。
【００５０】
ＲＯＭ７には、制御プログラム７０が記憶されており、ＣＰＵ５は、ＲＯＭ７に記憶される制御プログラム７０を読み出して実行する。図５に示すように、ＲＯＭ７に記憶される制御プログラム７０は、初期化処理７１と、制御対象の一例であるモータ１１を周期的に制御するための周期制御処理７２と、外部通信機能９とＸＣＰを利用して外部通信を行うためのＸＣＰ処理７３と、ＢＰ割り込み処理７４と、ＭＰＵ割り込み処理７５とを有する。
【００５１】
次に、制御プログラム７０の周期制御処理７２について、図６を参照しながら説明する。図６は、本発明の実施の形態１におけるＣＰＵ５が実行する制御プログラム７０の周期制御処理７２を示すフローチャートである。
【００５２】
ステップＳ１０１において、ＣＰＵ５は、Ｉ／Ｏ４から入力されるセンサ電圧値を読み出して取得し、処理がステップＳ１０２へと進む。ＣＰＵ５がセンサ電圧値を読み出す手段としては、例えば、マイコン３に具備されるＡ／Ｄ変換機能、あるいは、センサと通信するためのＳＥＮＴまたはＰＳＩ５のプロトコルを利用する手段が考えられる。
【００５３】
ステップＳ１０２において、ＣＰＵ５は、ステップＳ１０１で取得したセンサ電圧値を補正し、処理がステップＳ１０５へと進む。
【００５４】
ステップＳ１０５において、ＣＰＵ５は、周期制御処理７２の仕様に対しての対応の要否を示す対応要否情報を読み出し、その対応要否情報を判定する。なお、周期制御処理７２は、２種類以上の仕様を有し、２種類以上の仕様のうちの特定の仕様に対しての対応として、後述するステップＳ１０６の処理を実行する必要がある。
【００５５】
また、ステップＳ１０５の判定処理では、対応要否情報が「０」である場合には、対応が不要であると判定され、対応要否情報が、「０」でない、すなわち「１」である場合には、対応が必要であると判定されるように構成されている。
【００５６】
ステップＳ１０５において、ＣＰＵ５は、対応要否情報が、対応が不要であることを示す「０」であるか否かを判定する。ＣＰＵ５は、対応要否情報が「０」であると判定した場合には、処理がステップＳ１０３へと進む。一方、ＣＰＵ５は、対応要否情報が「０」でないと判定した場合には、処理がステップＳ１０６へと進む。
【００５７】
ＣＰＵ５が、対応要否情報が「０」であるか否かを判定する手段としては、例えば、以下の手段が考えられる。すなわち、ＣＰＵ５は、周期制御処理７２の処理開始時にＩ／Ｏ４から入力されるデジタル入力値を読み出して取得し、その値がＨｉｇｈレベルであるかＬｏｗレベルであるかによって、対応要否情報が「０」であるか否かを判定する。
【００５８】
ステップＳ１０６において、ＣＰＵ５は、ステップＳ１０２で補正されたセンサ電圧値に対してさらに補正、すなわち、センサ電圧値を追加補正し、処理がステップＳ１０３へと進む。
【００５９】
ステップＳ１０３において、ＣＰＵ５は、ステップＳ１０２での補正後のセンサ電圧値、またはステップＳ１０６での追加補正後のセンサ電圧値から、制御量を算出し、処理がステップＳ１０４へと進む。
【００６０】
ステップＳ１０４において、ＣＰＵ５は、ステップＳ１０４で算出された制御量をＩ／Ｏ４に出力し、処理が終了となる。ＣＰＵ５は、例えば、ＰＷＭ（Ｐｕｌｓｅ  Ｗｉｄｔｈ  Ｍｏｄｕｌａｔｉｏｎ）制御に対応した制御量をＩ／Ｏ４に出力する。駆動回路１０は、Ｉ／Ｏ４から入力される制御量に従って、モータ１１を駆動する。
【００６１】
次に、図６に示す制御プログラム７０の周期制御処理７２の不具合が発生した際のその不具合の原因を特定する手順について説明する。ここでは、図６に示す周期制御処理７２の不具合の一例として、ステップＳ１０５において、ＣＰＵ５が、周期制御処理７２の仕様に対しての対応が必要であると判定し、ステップＳ１０６を実行すべきところを、逆の判定が行われて、ステップＳ１０６が実行されない場合を考える。この場合、ステップＳ１０６でセンサ電圧値が追加補正されることなく、ステップＳ１０３で制御量が算出されるので、結果として、制御プログラム７０について統合試験を実施した際に、要求性能を満足しない結果となる。
【００６２】
なお、ここでは説明のために、上述のとおり不具合の原因を予め示しているが、実際の不具合の原因の調査の開始段階では、要求性能を満足しないこと以外、不具合の原因が不明の状態である。
【００６３】
本実施の形態１では、不具合の原因を特定するために、図６に示す周期制御処理７２において、Ｉ／Ｏ４から入力されるセンサ電圧値に対して、次の３つの項目（１）〜（３）を確認する。
【００６４】
・項目（１）：ステップＳ１０４でＩ／Ｏ４に出力された制御量が設計範囲内であること
・項目（２）：ステップＳ１０３で算出された制御量が設計範囲内であること
・項目（３）：ステップＳ１０２で補正されたセンサ電圧値が設計範囲内であること
【００６５】
上述の項目（１）〜（３）の確認を効率良く行うために、ＲＡＭ６の拡張プログラム記憶部６３のプログラム記憶領域６３１には、後述する図８に示す拡張プログラム、すなわち、第１拡張プログラムが記憶される。また、その拡張プログラムの開始アドレスは、外部通信機能９とＸＣＰを利用するなどして記憶される。
【００６６】
コマンド記憶部６２の識別番号記憶配列６２１と、第１引数記憶配列６２２と、第２引数記憶配列６２３のそれぞれには、後述する図９に示す識別番号と、第１引数と、第２引数とが対応付けられて記憶される。
【００６７】
図８および図９に示されるＮは、制御プログラム拡張部６０をＲＡＭ６に記憶する際に０に設定される。制御プログラム拡張部６０をＲＡＭ６に記憶する際に、コマンド実行結果記憶領域６２４には、図９に示すコマンドの実行結果が未だ記憶されていないことを示す、例えば０または２５５等の初期値が記憶される。
【００６８】
なお、図９では、ＢＰ割り込みが発生する場合に実行されるコマンドが示されているが、ＢＰ割り込みの代わりにＭＰＵ割り込みが発生するようにした場合であっても、図９と同様のコマンドが実行される。以下では、説明の簡単化のため、ＢＰ割り込みが発生する場合について説明する。
【００６９】
ＣＰＵ５が図６に示すステップＳ１０１を実行した後にＢＰ割り込みを発生させるために、ＣＰＵ５は、ステップＳ１０１を実行する際にアクセスする実行アドレス、すなわちステップＳ１０１の実行アドレスにＢＰ５１を設定する。ＣＰＵ５がアクセス可能なアドレスにＢＰ５１が配置されている場合、この設定は、外部通信機能９とＸＣＰを利用して実施される。ＣＰＵ５がアクセス可能なアドレスにＢＰ５１が配置されておらず、ＣＰＵ５の専用命令等を使用してこの設定を実施する必要がある場合、ＸＣＰにユーザー定義のコマンドを追加することで、この設定を実施することができる。
【００７０】
このように、アクセス検知機能としてのＢＰ５１は、ＣＰＵ５が、周期制御処理７２を構成する一連の処理であるステップＳ１０１〜Ｓ１０６の中で複数の予め決められる特定処理を実行する際にアクセスする実行アドレスに、ＣＰＵ５がアクセスしたことを検知して、割り込みを発生させる。
【００７１】
本実施の形態１では、上述したとおり、アクセス検知機能がＢＰ５１によって構成されている場合を例示している。この場合、ＣＰＵ５は、ＢＰ５１を特定処理の実行アドレスに設定する。このようにアクセス検知機能としてのＢＰ５１を設定することで、ＢＰ５１は、この実行アドレスにＣＰＵがアクセスしたことを検知して、割り込みを発生させる。
【００７２】
なお、アクセス検知機能が第１ＭＰＵ５２および第２ＭＰＵ５３によって構成される場合、ＣＰＵ５は、第１ＭＰＵ５２および第２ＭＰＵ５３を、特定処理の実行アドレスに基づいたアドレス範囲に設定する。具体的なアドレス範囲の設定方法は、上述したＭＰＵ割り込みを発生させるための方法と同様である。このようにアクセス検知機能としての第１ＭＰＵ５２および第２ＭＰＵ５３を設定することで、第１ＭＰＵ５２および第２ＭＰＵ５３は、ＣＰＵ５がアクセスした実行アドレスがアドレス範囲外であることをもって、実行アドレスにＣＰＵがアクセスしたことを検知して、割り込みを発生させる。
【００７３】
なお、ＢＰ５１が設定されるステップＳ１０１〜ステップＳ１０４のそれぞれの実行アドレスは、例えば、制御プログラム７０をＰＣ上のデバッガで読み込み、処理とアドレスとの対応を表示することで取得可能である。
【００７４】
次に、図６に示す周期制御処理７２のステップＳ１０１〜ステップＳ１０４のそれぞれが実行されるたびにＢＰ割り込みが発生する場合のＣＰＵ５の動作について説明する。
【００７５】
上述のとおり、制御プログラム拡張部６０がＲＡＭ６に記憶され、ＢＰ５１の機能が有効化された後、ＣＰＵ５がステップＳ１０１を実行すれば、第１ＢＰ割り込みが発生する。
【００７６】
第１ＢＰ割り込みが発生すると、ＣＰＵ５は、図７に示す割り込み処理を実行する。ここで、ＢＰ割り込みが発生する場合に実行される割り込み処理について、図７を参照しながら説明する。図７は、本発明の実施の形態１におけるＣＰＵ５が実行する制御プログラム７０のＢＰ割り込み処理７４を示すフローチャートである。割り込み処理は、後述するように、周期制御処理７２を構成する一連の処理であるステップＳ１０１〜Ｓ１０６の中で、複数の予め決められる特定処理が個別に実行されるたびに実行される。
【００７７】
図７に示す割り込み処理は、発生した割り込みに応答して、周期制御処理７２で特定処理の実行後以降の処理を中断し、第１拡張プログラムまたは第２拡張プログラムを実行し、当該実行後に、周期制御処理７２で特定処理の実行後以降の処理を再開するように、ＣＰＵ５に対して動作させる。
【００７８】
なお、図７に示す割り込み処理は、制御プログラム７０のＢＰ割り込み処理７４と、ＭＰＵ割り込み処理７５に適用可能な処理である。つまり、図７に示す割り込み処理は、ＢＰ割り込み処理７４およびＭＰＵ割り込み処理７５のいずれにも適用可能である。図７に示す割り込み処理は、ＢＰ割り込み処理７４およびＭＰＵ割り込み処理７５のいずれかに適用してもよいし、両方に適用してもよい。
【００７９】
図７に示すように、第１ＢＰ割り込みが発生して割り込み処理の実行が開始されると、ステップＳ２０１において、ＣＰＵ５は、サブルーチン開始アドレス記憶変数６１１に記憶されるサブルーチンの開始アドレスを読み出し、処理がステップＳ２０２へと進む。
【００８０】
ステップＳ２０２において、ＣＰＵ５は、ステップＳ２０１で読み出したサブルーチンの開始アドレスが有効であるか否かを判定する。開始アドレスが有効であると判定された場合には、処理がステップＳ２０３へと進み、開始アドレスが有効でない、すなわち無効であると判定された場合には、処理が終了となる。
【００８１】
ＣＰＵ５がサブルーチン開始アドレス記憶変数６１１に記憶されるサブルーチンの開始アドレスが有効であるか無効であるかを判定する手段としては、例えば、以下の手段が考えられる。すなわち、ＣＰＵ５は、開始アドレスがゼロであれば無効であると判定し、開始アドレスがゼロ以外であれば有効であると判定する。
【００８２】
ステップＳ２０３において、ＣＰＵ５は、ステップＳ２０１で読み出した開始アドレスに対応するサブルーチンを実行し、処理が終了となる。
【００８３】
なお、サブルーチン開始アドレス記憶変数６１１は、制御プログラム７０の実行開始時に、初期化処理７１によって初期化されて、無効なアドレスを記憶する。
【００８４】
図６に戻り、ＣＰＵ５は、ステップＳ１０１を実行した後、第１ＢＰ割り込みが発生すると、図７に示す割り込み処理を実行する。第１ＢＰ割り込みが発生する場合、上述したように、サブルーチン開始アドレス記憶変数６１１には、有効な開始アドレスが設定されている。
【００８５】
したがって、ＣＰＵ５は、割り込み処理において、ステップＳ２０１を実行した後、ステップＳ２０２において、ステップＳ２０１で読み出した開始アドレスが有効であると判定し、処理がステップＳ２０３へと進む。
【００８６】
ステップＳ２０３において、ＣＰＵ５は、ステップＳ２０１で読み出した開始アドレスに対応するサブルーチンを呼び出し、そのサブルーチンの実行を開始する。
【００８７】
ここで、割り込み処理で呼び出されるサブルーチンについて、図８を参照しながら説明する。図８は、本発明の実施の形態１におけるＣＰＵ５が実行する制御プログラム７０の割り込み処理で呼び出されるサブルーチンを示すフローチャートである。
【００８８】
図８に示す拡張プログラム、すなわち第１拡張プログラムは、特定処理の処理結果をＲＡＭ６に記憶するとともに、周期制御処理７２で特定処理の次に実行される次の特定処理の実行アドレスにＣＰＵ５がアクセスしたことをアクセス検知機能が検知するように、アクセス検知機能を設定するよう、ＣＰＵ５に対して動作させる。
【００８９】
割り込み処理でサブルーチンが呼び出されると、拡張プログラム記憶部６３のプログラム記憶領域６３１に記憶される拡張プログラム、すなわち図８に示すサブルーチンが実行される。ステップＳ３０１において、ＣＰＵ５は、コマンド記憶部６２の識別番号記憶配列６２１に記憶される要素Ｎを読み出し、処理がステップＳ３０２へと進む。
【００９０】
ステップＳ３０２において、ＣＰＵ５は、ステップＳ３０１で読み出した要素Ｎに対して１を加算し、その加算後の要素Ｎを識別番号記憶配列６２１に記憶し、処理がステップＳ３０３へと進む。
【００９１】
ステップＳ３０３において、ＣＰＵ５は、ステップＳ３０１で読み出した要素Ｎに対応するコマンドが終了コマンドであるか否かを判定する。コマンドが終了コマンドであると判定された場合には、処理が終了となり、コマンドが終了コマンドでないと判定された場合には、処理がステップＳ３０４へと進む。
【００９２】
ステップＳ３０４において、ステップＳ３０１で読み出した要素Ｎに対応するコマンドを実行し、処理がステップＳ３０１へと戻り、ステップＳ３０１以降の処理を再び実行する。
【００９３】
ここで、図８に示すサブルーチンで実行されるコマンドについて、図９を参照しながら説明する。図９は、本発明の実施の形態１におけるＣＰＵ５が実行する制御プログラム７０の割り込み処理で呼び出されるサブルーチンのコマンドの定義の一例を示す表である。
【００９４】
図９に示すように、要素Ｎおよび識別番号と、第１引数と、第２引数とが対応付けられて、識別番号記憶配列６２１と、第１引数記憶配列６２２と、第２引数記憶配列６２３とにそれぞれ記憶されている。また、図９では、要素Ｎに対応するコマンドの意味も併せて示している。
【００９５】
図７に戻り、割り込み処理でサブルーチンが呼び出されると、はじめは、Ｎ＝０であるので、図８に示すサブルーチンでは、ステップＳ３０２において、Ｎ＝１となり、ステップＳ３０４において、Ｎ＝０に対応するコマンドが実行される。この場合、図９から分かるように、ＣＰＵ５は、ステップＳ１０１で取得したセンサ電圧値を読み出して第１データとしてコマンド実行結果記憶領域６２４に記憶する。
【００９６】
Ｎ＝０に対応するコマンドは、処理の終了を指示する終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝２となり、ステップＳ３０４において、Ｎ＝１に対応するコマンドが実行される。この場合、ＣＰＵ５が図６に示すステップＳ１０２を実行した後にＢＰ割り込みを発生させるために、ＣＰＵ５は、ステップＳ１０２を実行する際にアクセスする実行アドレス、すなわちステップＳ１０２の実行アドレスにＢＰ５１を設定する。
【００９７】
Ｎ＝１に対応するコマンドは、終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝３となり、ステップＳ３０３において、Ｎ＝２に対応するコマンドが終了コマンドであると判定され、処理が終了となる。
【００９８】
この場合、サブルーチンが終了となり、処理が図７に示す割り込み処理に返され、さらに割り込み処理が終了となり、処理が図６に示す周期制御処理７２のステップＳ１０１の実行の完了地点に戻る。なお、サブルーチンの終了時において、識別番号記憶配列６２１に記憶される要素Ｎの値そのものは、上述したとおり、Ｎ＝３になっている。
【００９９】
このように、ＣＰＵ５は、アクセス検知機能としてのＢＰ５１によって発生した割り込みに応答して、周期制御処理７２でステップＳ１０１の実行後以降の処理を中断する。また、ＣＰＵ５は、割り込み処理を実行させることで、拡張プログラムに従って、ステップＳ１０１の処理結果をコマンド実行結果記憶領域６２４に記憶する。
【０１００】
続いて、ＣＰＵ５は、周期制御処理７２でステップＳ１０１の次に実行される次の特定処理であるステップＳ１０２の実行アドレスにＣＰＵ５がアクセスしたことをＢＰ５１が検知するように、ＢＰ５１を設定する。また、ＣＰＵ５は、割り込み処理を終了し、周期制御処理７２でステップＳ１０１実行後以降の処理を再開する。
【０１０１】
図６に戻り、ＣＰＵ５は、ステップＳ１０２を実行した後、第２ＢＰ割り込みが発生すると、図７に示す割り込み処理を再度実行する。この場合、ステップＳ２０３でサブルーチンが呼び出され、そのサブルーチンが再度実行される。
【０１０２】
割り込み処理でサブルーチンが呼び出されると、前回のサブルーチンの終了時では、Ｎ＝３になっているので、今回のサブルーチンでは、ステップＳ３０２において、Ｎ＝４となり、ステップＳ３０４において、Ｎ＝３に対応するコマンドが実行される。この場合、ＣＰＵ５は、ステップＳ１０２で補正したセンサ電圧値を読み出して第２データとしてコマンド実行結果記憶領域６２４に記憶する。
【０１０３】
Ｎ＝３に対応するコマンドは、終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝５となり、ステップＳ３０４において、Ｎ＝４に対応するコマンドが実行される。この場合、ＣＰＵ５が図６に示すステップＳ１０３を実行した後にＢＰ割り込みを発生させるために、ＣＰＵ５は、ステップＳ１０３を実行する際にアクセスする実行アドレス、すなわちステップＳ１０３の実行アドレスにＢＰ５１を設定する。
【０１０４】
Ｎ＝４に対応するコマンドは、終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝６となり、ステップＳ３０３において、Ｎ＝５に対応するコマンドが終了コマンドであると判定され、処理が終了となる。
【０１０５】
この場合、サブルーチンが終了となり、処理が図７に示す割り込み処理に返され、さらに割り込み処理が終了となり、処理が図６に示す周期制御処理７２のステップＳ１０２の実行の完了地点に戻る。なお、サブルーチンの終了時において、識別番号記憶配列６２１に記憶される要素Ｎの値そのものは、上述したとおり、Ｎ＝６になっている。
【０１０６】
このように、ＣＰＵ５は、アクセス検知機能としてのＢＰ５１によって発生した割り込みに応答して、周期制御処理７２でステップＳ１０２の実行後以降の処理を中断する。また、ＣＰＵ５は、割り込み処理を実行させることで、拡張プログラムに従って、ステップＳ１０２の処理結果をコマンド実行結果記憶領域６２４に記憶する。
【０１０７】
続いて、ＣＰＵ５は、周期制御処理７２でステップＳ１０２の次に実行される次の特定処理であるステップＳ１０３の実行アドレスにＣＰＵ５がアクセスしたことをＢＰ５１が検知するように、ＢＰ５１を設定する。また、ＣＰＵ５は、割り込み処理を終了し、周期制御処理７２でステップＳ１０２実行後以降の処理を再開する。
【０１０８】
図６に戻り、ＣＰＵ５は、ステップＳ１０３を実行した後、第３ＢＰ割り込みが発生すると、図７に示す割り込み処理を再度実行する。この場合、ステップＳ２０３でサブルーチンが呼び出され、そのサブルーチンが再度実行される。
【０１０９】
割り込み処理でサブルーチンが呼び出されると、前回のサブルーチンの終了時では、Ｎ＝６になっているので、今回のサブルーチンでは、ステップＳ３０２において、Ｎ＝７となり、ステップＳ３０４において、Ｎ＝６に対応するコマンドが実行される。この場合、ＣＰＵ５は、ステップＳ１０３で算出した制御量を読み出して第３データとしてコマンド実行結果記憶領域６２４に記憶する。
【０１１０】
Ｎ＝６に対応するコマンドは、終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝８となり、ステップＳ３０４において、Ｎ＝７に対応するコマンドが実行される。この場合、ＣＰＵ５が図６に示すステップＳ１０４を実行した後にＢＰ割り込みを発生させるために、ＣＰＵ５は、ステップＳ１０４を実行する際にアクセスする実行アドレス、すなわちステップＳ１０４の実行アドレスにＢＰ５１を設定する。
【０１１１】
Ｎ＝７に対応するコマンドは、終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝９となり、ステップＳ３０３において、Ｎ＝８に対応するコマンドが終了コマンドであると判定され、処理が終了となる。
【０１１２】
この場合、サブルーチンが終了となり、処理が図７に示す割り込み処理に返され、さらに割り込み処理が終了となり、処理が図６に示す周期制御処理７２のステップＳ１０３の実行の完了地点に戻る。なお、サブルーチンの終了時において、識別番号記憶配列６２１に記憶される要素Ｎの値そのものは、上述したとおり、Ｎ＝９になっている。
【０１１３】
このように、ＣＰＵ５は、アクセス検知機能としてのＢＰ５１によって発生した割り込みに応答して、周期制御処理７２でステップＳ１０３の実行後以降の処理を中断する。また、ＣＰＵ５は、割り込み処理を実行させることで、拡張プログラムに従って、ステップＳ１０３の処理結果をコマンド実行結果記憶領域６２４に記憶する。
【０１１４】
続いて、ＣＰＵ５は、周期制御処理７２でステップＳ１０３の次に実行される次の特定処理であるステップＳ１０４の実行アドレスにＣＰＵ５がアクセスしたことをＢＰ５１が検知するように、ＢＰ５１を設定する。また、ＣＰＵ５は、割り込み処理を終了し、周期制御処理７２でステップＳ１０３実行後以降の処理を再開する。
【０１１５】
図６に戻り、ＣＰＵ５は、ステップＳ１０４を実行した後、第４ＢＰ割り込みが発生すると、図７に示す割り込み処理を再度実行する。この場合、ステップＳ２０３でサブルーチンが呼び出され、そのサブルーチンが再度実行される。
【０１１６】
割り込み処理でサブルーチンが呼び出されると、前回のサブルーチンの終了時では、Ｎ＝９になっているので、今回のサブルーチンでは、ステップＳ３０２において、Ｎ＝１０となり、ステップＳ３０４において、Ｎ＝９に対応するコマンドが実行される。この場合、ＣＰＵ５は、ステップＳ１０４で出力した制御量を読み出して第４データとしてコマンド実行結果記憶領域６２４に記憶する。
【０１１７】
Ｎ＝９に対応するコマンドは、終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝１１となり、ステップＳ３０４において、Ｎ＝１０に対応するコマンドが実行される。この場合、ＣＰＵ５は、ＢＰ５１を０に設定することで実質的にＢＰ割り込みを無効化する。
【０１１８】
Ｎ＝１０に対応するコマンドは、終了コマンドではないので、サブルーチンでは、引き続き、ステップＳ３０１以降の処理が実行される。サブルーチンでは、ステップＳ３０２において、Ｎ＝１２となり、ステップＳ３０３において、Ｎ＝１１に対応するコマンドが終了コマンドであると判定され、処理が終了となる。
【０１１９】
この場合、サブルーチンが終了となり、処理が図７に示す割り込み処理に返され、さらに割り込み処理が終了となり、処理が図６に示す周期制御処理７２のステップＳ１０４の実行の完了地点に戻り、処理が終了となる。
【０１２０】
このように、ＣＰＵ５は、アクセス検知機能としてのＢＰ５１によって発生した割り込みに応答して、周期制御処理７２でステップＳ１０４の実行後以降の処理を中断する。また、ＣＰＵ５は、割り込み処理を実行させることで、拡張プログラムに従って、ステップＳ１０４の処理結果をコマンド実行結果記憶領域６２４に記憶する。
【０１２１】
ＣＰＵ５は、周期制御処理７２を構成する一連の処理の中での特定処理であるステップＳ１０１〜Ｓ１０４をすべて実行し、さらに、周期制御処理７２の最後の処理であるステップＳ１０４を実行したので、周期制御処理７２が終了となる。
【０１２２】
このように、第４ＢＰ割り込みが発生した後については、新たなＢＰ割り込みが発生しないので、割り込み処理が実行されることなく、図６に示す周期制御処理７２が終了となる。したがって、コマンド実行結果記憶領域６２４には、上述のＮ＝０〜１１に対応する一連のコマンド実行後のデータとして、第１データ、第２データ、第３データおよび第４データが記憶される。コマンド実行結果記憶領域６２４に記憶されるデータを、外部通信機能９とＸＣＰを利用して読み出すことで、ステップＳ１０１、Ｓ１０２、Ｓ１０３およびＳ１０４のそれぞれを実行した結果を、制御プログラム７０の周期制御処理７２を変更することなく、取得することができる。
【０１２３】
これに対して、本実施の形態１におけるＥＣＵ１の構成を適用せずに、ＸＣＰのみを利用する場合、ＸＣＰではアドレスが既知の静的変数に記憶されるデータのみを取得可能なため、自動変数、およびＣＰＵレジスタに一時的に保持されるデータを取得することができない。しかしながら、本実施の形態１におけるＥＣＵ１の構成によれば、ＣＰＵ５が実行するコマンドおよびスタックフレームを取得するコマンドを定義することで、制御プログラム７０の周期制御処理７２内で一時的に使用される自動変数および一時的にＣＰＵレジスタに保持されるデータを取得することが可能である。
【０１２４】
上述のＮ＝０〜１１に対応する一連のコマンド実行後のデータをコマンド実行結果記憶領域６２４から取得することで、上述の項目（１）〜（３）を確認することができる。その結果、ステップＳ１０４でＩ／Ｏ４に出力された制御量、ステップＳ１０３で算出された制御量およびステップＳ１０２で補正されたセンサ電圧値が、それぞれ設計範囲内ではないことが分かる。つまり、ステップＳ１０１で取得されたセンサ電圧値が設計どおりに補正されていないことを推定することができる。
【０１２５】
本実施の形態１では、センサ電圧値が設計どおりに補正されていないという推定を確認するために、図６に示す周期制御処理７２において、次の３つの項目（４）〜（６）をさらに確認する。
【０１２６】
・項目（４）：対応要否情報を正しく読み出していること
・項目（５）：ステップＳ１０６で追加補正が実行されていること
・項目（６）：ステップＳ１０６で追加補正されたセンサ電圧値が設計範囲内であること
【０１２７】
上述の項目（４）〜（６）の確認を効率良く行うために、ＲＡＭ６の拡張プログラム記憶部６３のプログラム記憶領域６３１には、上述の図８に示す拡張プログラムが記憶される。また、その拡張プログラムの開始アドレスは、外部通信機能９とＸＣＰを利用するなどして記憶される。
【０１２８】
コマンド記憶部６２の識別番号記憶配列６２１と、第１引数記憶配列６２２と、第２引数記憶配列６２３のそれぞれには、後述する図１０に示す識別番号と、第１引数と、第２引数とが対応付けられて記憶される。また、ＣＰＵ５が図６に示すステップＳ１０２を実行した後にＢＰ割り込みを発生させるために、ＣＰＵ５は、ステップＳ１０２の実行アドレスにＢＰ５１を設定する。
【０１２９】
上述したとおり、制御プログラム拡張部６０がＲＡＭ６に記憶され、ＢＰ５１の機能が有効化された後、ＣＰＵ５がステップＳ１０２を実行すれば、第１ＢＰ割り込みが発生する。
【０１３０】
第１ＢＰ割り込みが発生すると、ＣＰＵ５は、上述の項目（１）〜（３）を確認する場合と同様に、図７に示す割り込み処理を実行する。ＣＰＵ５は、割り込み処理において、サブルーチン開始アドレス記憶変数６１１に記憶される開始アドレスに対応するサブルーチンを呼び出し、そのサブルーチンの実行を開始する。
【０１３１】
ステップＳ２０３でのサブルーチンの呼び出しによって、図８に示すサブルーチンが実行される。このサブルーチンでは、図１０に示すコマンドが実行される。図１０は、本発明の実施の形態１におけるＣＰＵ５が実行する制御プログラム７０の割り込み処理で呼び出されるサブルーチンのコマンドの定義の一例を示す表である。
【０１３２】
図１０に示すように、要素Ｎおよび識別番号と、第１引数と、第２引数とが対応付けられて、識別番号記憶配列６２１と、第１引数記憶配列６２２と、第２引数記憶配列６２３とにそれぞれ記憶されている。また、図１０では、要素Ｎに対応するコマンドの意味も併せて示している。
【０１３３】
サブルーチンにおいて、図１０に示すＮ＝０〜２に対応するコマンドが実行された後、呼び出し側の割り込み処理に処理が返される。この時点で、ＣＰＵ５は、ステップＳ１０２の実行の完了地点、すなわち、ステップＳ１０５の実行の開始直前において、上述の読み出された対応要否情報を、第１データとして、コマンド実行結果記憶領域６２４に記憶する。
【０１３４】
上述したとおり、図８に示すサブルーチンの終了によって、図７に示す割り込み処理に処理が返され、さらに、割り込み処理が終了となり、ＣＰＵ５は、ステップＳ１０２の実行の完了地点に復帰する。その後、ＣＰＵ５は、ステップＳ１０５を実行する。
【０１３５】
本実施の形態１では、上述したとおり、不具合の一例として、ステップＳ１０５において、ＣＰＵ５が、周期制御処理７２の仕様に対しての対応が必要であると判定し、ステップＳ１０６を実行すべきところを、逆の判定が行われて、ステップＳ１０６が実行されない場合を考えている。したがって、ステップＳ１０５において、ＣＰＵ５は、対応要否情報が、対応が不要であることを示す「０」であると判定し、ステップＳ１０６を実行せずに、ステップＳ１０３を実行する。
【０１３６】
そのため、ＣＰＵ５は、図１０に示すＮ＝１に対応するコマンドを実行することでＢＰ５１を、ステップＳ１０６の実行アドレスに設定したものの、ステップＳ１０６を実行していないので、第２ＢＰ割り込みが発生しない。その結果、コマンド実行結果記憶領域６２４に第２データとして記憶される追加補正後のセンサ電圧値が初期値のままとなり、さらに、要素Ｎの値が３に保持されたままとなる。
【０１３７】
上述のＮ＝０〜５に対応する一連のコマンド実行後のデータをコマンド実行結果記憶領域６２４から取得することで、上述の項目（４）〜（６）を確認することができる。その結果、対応要否情報が正しく読み出されており、追加補正が実行されておらず、追加補正後のセンサ電圧値がステップＳ１０６の未実行のため初期値であることが分かる。
【０１３８】
上述の項目（１）〜（６）の確認結果から、不具合の原因は、センサ電圧値の追加補正が未実施であることによる可能性があることが分かる。
【０１３９】
これに対して、本実施の形態１におけるＥＣＵ１の構成を適用せずに、ＸＣＰのみを利用する場合、項目（４）および（５）を直接確認することができない。そのため、ステップＳ１０３の実行前における補正後のセンサ電圧値が設計範囲外であることを確認できたとしても、その理由がステップＳ１０６の未実行によるものであるという直接の証拠を得ることができない。
【０１４０】
しかしながら、本実施の形態１におけるＥＣＵ１の構成によれば、項目（４）および（５）を確認することができる。そのため、ステップＳ１０３の実行前における補正後のセンサ電圧値が設計範囲外である理由が、対応要否情報が正しく読み出されているものの、ステップＳ１０５での判定が誤り、ステップＳ１０６が未実行であったためであると推定することができる。
【０１４１】
なお、一般的なＢＰの機能では、特定のアドレスの実行を検知するのみでなく、特定のアドレスのデータ読み出しまたはデータ書き込みも検知可能である場合が多い。そこで、ＢＰ５１における特定のアドレスのデータ読み出しの検知機能を使用して、ＣＰＵ５が上述の対応要否情報を読み出した際にＢＰ割り込みを発生させてもよい。この場合、ＣＰＵ５は、そのＢＰ割り込みの発生に応答して、割り込み処理内で、対応要否情報をコマンド実行結果記憶領域６２４に記憶することができる。
【０１４２】
上述の不具合の原因の推定確度が高ければ、ステップＳ１０５の判定の内容を確認し、判定論理が逆であることを見つけることが容易になる。つまり、本実施の形態１におけるＥＣＵ１の構成によって、上述の項目（１）〜（６）を確認すれば、デバッガを使用することなく、ＸＣＰのメモリアクセス機能のみを用いた場合よりも高い確度で不具合の原因を特定することができる。
【０１４３】
このようにＣＰＵ５は、ＢＰ５１によって発生した割り込みに応答して、割り込み処理を実行させることで、周期制御処理７２で特定処理の実行後以降の処理を中断し、図８に示す拡張プログラムを実行する。ＣＰＵ５は、図８に示す拡張プログラムを実行させることで、特定処理、すなわちデータを取得することを所望する処理の処理結果をＲＡＭ６のコマンド実行結果記憶領域６２４に記憶させる。
【０１４４】
また、ＣＰＵ５は、図８に示す拡張プログラムを実行させることで、周期制御処理７２で特定処理の次に実行される次の特定処理の実行アドレスにＣＰＵ５がアクセスしたことをＢＰ５１が検知するように、ＢＰ５１を設定する。その後、ＣＰＵ５は、拡張プログラムの実行後に、周期制御処理７２で特定処理の実行後以降の処理を再開する。
【０１４５】
本実施の形態１では、制御プログラム７０の周期制御処理７２の不具合の原因を推定した後、その不具合を修正し、その修正後の周期制御処理７２の結果を確認する。
【０１４６】
上述の修正の確認を効率良く実施するために、ＲＡＭ６の拡張プログラム記憶部６３のプログラム記憶領域６３１には、後述する図１１に示す拡張プログラム、すなわち、第２拡張プログラムが記憶される。また、その拡張プログラムの開始アドレスは、外部通信機能９とＸＣＰを利用するなどして記憶される。
【０１４７】
ＣＰＵ５が図６に示すステップＳ１０２を実行した後にＢＰ割り込みを発生させるために、ＣＰＵ５は、ステップＳ１０２の実行アドレスにＢＰ５１を設定する。
【０１４８】
上述したとおり、制御プログラム拡張部６０がＲＡＭ６に記憶され、ＢＰ５１の機能が有効化された後、ＣＰＵ５がステップＳ１０２を実行すれば、ＣＰＵ５がステップＳ１０５を実行する直前で、ＢＰ割り込みが発生する。
【０１４９】
ＢＰ割り込みが発生すると、ＣＰＵ５は、図７に示す割り込み処理を実行する。ＣＰＵ５は、割り込み処理において、サブルーチン開始アドレス記憶変数６１１に記憶される開始アドレスに対応する図１１に示すサブルーチンを呼び出し、そのサブルーチンの実行を開始する。
【０１５０】
ここで、割り込み処理で呼び出されるサブルーチンについて、図１１を参照しながら説明する。図１１は、本発明の実施の形態１におけるＣＰＵ５が実行する制御プログラム７０の割り込み処理で呼び出されるサブルーチンを示すフローチャートである。
【０１５１】
図１１に示す拡張プログラム、すなわち、第２拡張プログラムは、周期制御処理７２で発生する不具合の原因である処理を修正した後の修正後処理を実行するように、ＣＰＵ５に対して動作させる。修正後処理は、図１１に示すステップＳ１０５ＮおよびＳ１０６に対応する。
【０１５２】
割り込み処理でサブルーチンが呼び出されると、ＣＰＵ５は、拡張プログラム記憶部６３のプログラム記憶領域６３１に記憶される図１１に示す拡張プログラムを実行する。この場合、ステップＳ１０５Ｎにおいて、ＣＰＵ５は、対応要否情報が、対応が不要であることを示す「１」であるか否かを判定する。
【０１５３】
ここで、ステップＳ１０５Ｎの判定処理では、対応要否情報が「１」である場合には、対応が不要であると判定され、対応要否情報が、「１」でない、すなわち「０」である場合には、対応が必要であると判定されるように構成されている。つまり、ステップＳ１０５Ｎは、周期制御処理７２で発生する不具合の原因である図６に示すステップＳ１０５を修正している。具体的には、ステップＳ１０５Ｎの判定論理は、ステップＳ１０５の判定論理の逆となるように修正されている。
【０１５４】
ステップＳ１０５Ｎにおいて、ＣＰＵ５は、対応要否情報が「１」であると判定した場合には、処理が終了となる。一方、ＣＰＵ５は、対応要否情報が「１」でないと判定した場合には、処理がステップＳ１０６へと進む。
【０１５５】
図１１に示すステップＳ１０６を実行後、サブルーチンが終了する。図１１に示すサブルーチンの終了によって、図７に示す割り込み処理に処理が返され、さらに割り込み処理が終了となり、処理が図６に示すステップＳ１０２の実行の完了地点に戻る。その後、ＣＰＵ５は、ステップＳ１０５の判定を実行するものの、この判定は、上述した不具合によって正しく行われない。そのため、ＣＰＵ５は、ステップＳ１０６を実行せずに、ステップＳ１０３を実行する。その後、ＣＰＵ５は、ステップＳ１０４を実行し、周期制御処理７２が終了となる。
【０１５６】
このように、ＣＰＵ５は、図１１に示す拡張プログラムを実行させることで、周期制御処理７２で不具合が発生する原因である処理を修正した後の修正後処理を実行する。ＣＰＵ５は、その後、ＣＰＵ５は、拡張プログラムの実行後に、周期制御処理７２で特定処理の実行後以降の処理を再開する。すなわち、図１１に示すサブルーチンによって、ＣＰＵ５は、ステップＳ１０５ＮおよびステップＳ１０６を実行することでセンサ電圧値の追加補正を行う。その後、ＣＰＵ５は、図６に示す周期制御処理７２によって、ステップＳ１０５およびＳ１０３を順に実行し、最後にステップＳ１０４を実行する。したがって、図１１に示す拡張プログラムをＲＡＭ６に記憶した上で、制御プログラム７０について統合試験を実施すれば、制御プログラム７０の周期制御処理７２を変更することなく、要求性能を満足しない不具合が解消することを確認できる。つまり、制御プログラム７０の不具合修正の結果を確認する際に、Ｏｎ−ｔａｒｇｅｔ  Ｂｙｐａｓｓｉｎｇに必要なフック関数を使用する必要がなくなる。
【０１５７】
以上、本実施の形態１の車載制御装置によれば、周期制御処理と、周期制御処理を構成する一連の処理の中で複数の予め決められる特定処理が個別に実行されるたびに実行される割り込み処理とを含む制御プログラムを記憶するＲＯＭと、拡張プログラムとして第１拡張プログラムおよび第２拡張プログラムを記憶するＲＡＭと、制御プログラムおよび拡張プログラムを実行するＣＰＵとを備えて構成されている。
【０１５８】
また、上記の構成において、ＣＰＵは、以下のように構成されている。すなわち、ＣＰＵは、特定処理を実行する際にアクセスする実行アドレスにアクセスしたことを検知して、割り込みを発生させるアクセス検知機能を備えて構成されている。
【０１５９】
ＣＰＵは、アクセス検知機能によって発生した割り込みに応答して割り込み処理を実行させることで、周期制御処理で特定処理の実行後以降の処理を中断し、第１拡張プログラムまたは第２拡張プログラムを実行し、当該実行後に、周期制御処理で特定処理の実行後以降の処理を再開するように構成されている。ＣＰＵは、第１拡張プログラムを実行させることで、特定処理の処理結果をＲＡＭに記憶させるとともに、周期制御処理で特定処理の次に実行される次の特定処理の実行アドレスにＣＰＵがアクセスしたことをアクセス検知機能が検知するように、アクセス検知機能を設定するように構成されている。ＣＰＵは、第２拡張プログラムを実行させることで、周期制御処理で不具合が発生する原因である処理を修正した後の修正後処理を実行するように構成されている。
【０１６０】
上述の車載制御装置を構成することで、デバッガを使用しなくても制御プログラムの不具合の原因を特定することができるとともに、フック関数を用意しなくても制御プログラムの不具合の解消を確認することができる。
【符号の説明】
【０１６１】
１  車載制御装置（ＥＣＵ）、２  入力回路、３  マイコン、４  Ｉ／Ｏ、５  ＣＰＵ、６  ＲＡＭ、７  ＲＯＭ、８  タイマ、９  外部通信機能、１０  駆動回路、１１  モータ、１２  外部通信線、５１  ブレイクポイント機能、５２  第１メモリ保護機能、５３  第２メモリ保護機能、６０  制御プログラム拡張部、６１  拡張プログラム開始アドレス記憶部、６１１  サブルーチン開始アドレス記憶変数、６２  コマンド記憶部、６２１  識別番号記憶配列、６２２  第１引数記憶配列、６２３  第２引数記憶配列、６２４  コマンド実行結果記憶領域、６３  拡張プログラム記憶部、６３１  プログラム記憶領域、７０  制御プログラム、７１  初期化処理、７２  周期制御処理、７３  ＸＣＰ処理、７４  ＢＰ割り込み処理、７５  ＭＰＵ割り込み処理。
【図１】
2019087118.tif 000003
【図２】
2019087118.tif 000004
【図３】
2019087118.tif 000005
【図４】
2019087118.tif 000006
【図５】
2019087118.tif 000007
【図６】
2019087118.tif 000008
【図７】
2019087118.tif 000009
【図８】
2019087118.tif 000010
【図９】
2019087118.tif 000011
【図１０】
2019087118.tif 000012
【図１１】
2019087118.tif 000013
【手続補正書】
【提出日】平成30年11月15日(2018.11.15)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
本発明における車載制御装置は、制御対象を周期的に制御するための周期制御処理と、周期制御処理を構成する一連の処理の中で複数の予め決められる特定処理が個別に実行されるたびに実行される割り込み処理とを含む制御プログラムを記憶するＲＯＭと、拡張プログラムとして第１拡張プログラムおよび第２拡張プログラムを記憶するＲＡＭと、制御プログラムおよび拡張プログラムを実行するＣＰＵと、を備え、ＣＰＵは、特定処理を実行する際にアクセスする実行アドレスにアクセスしたことを検知して、割り込みを発生させるアクセス検知機能を備え、アクセス検知機能によって発生した割り込みに応答して割り込み処理を実行させることで、周期制御処理で特定処理の実行後以降の処理を中断し、第１拡張プログラムまたは第２拡張プログラムを実行し、当該実行後に、周期制御処理で特定処理の実行後以降の処理を再開し、第１拡張プログラムを実行させることで、特定処理の処理結果をＲＡＭに記憶させるとともに、周期制御処理で特定処理の次に実行される次の特定処理の実行アドレスにＣＰＵがアクセスしたことをアクセス検知機能が検知するように、アクセス検知機能を設定し、第２拡張プログラムを実行させることで、周期制御処理で不具合が発生する原因である処理の結果を修正するものである。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
制御対象を周期的に制御するための周期制御処理と、前記周期制御処理を構成する一連の処理の中で複数の予め決められる特定処理が個別に実行されるたびに実行される割り込み処理とを含む制御プログラムを記憶するＲＯＭと、
拡張プログラムとして第１拡張プログラムおよび第２拡張プログラムを記憶するＲＡＭと、
前記制御プログラムおよび前記拡張プログラムを実行するＣＰＵと、
を備え、
前記ＣＰＵは、
前記特定処理を実行する際にアクセスする実行アドレスにアクセスしたことを検知して、割り込みを発生させるアクセス検知機能を備え、
前記アクセス検知機能によって発生した前記割り込みに応答して前記割り込み処理を実行させることで、前記周期制御処理で前記特定処理の実行後以降の処理を中断し、前記第１拡張プログラムまたは前記第２拡張プログラムを実行し、当該実行後に、前記周期制御処理で前記特定処理の実行後以降の処理を再開し、
前記第１拡張プログラムを実行させることで、前記特定処理の処理結果を前記ＲＡＭに記憶させるとともに、前記周期制御処理で前記特定処理の次に実行される次の特定処理の実行アドレスに前記ＣＰＵがアクセスしたことを前記アクセス検知機能が検知するように、前記アクセス検知機能を設定し、
前記第２拡張プログラムを実行させることで、前記周期制御処理で不具合が発生する原因である処理の結果を修正する
車載制御装置。
【請求項２】
前記アクセス検知機能は、ブレイクポイント機能によって構成され、
前記ＣＰＵは、前記ブレイクポイント機能を、前記実行アドレスに設定し、
前記ブレイクポイント機能は、前記実行アドレスに前記ＣＰＵがアクセスしたことを検知して、前記割り込みを発生させる
請求項１に記載の車載制御装置。
【請求項３】
前記アクセス検知機能は、
適用するアドレス範囲の下限値と上限値が設定される第１メモリ保護機能、および適用するアドレス範囲の下限値と上限値が設定され、前記第１メモリ保護機能とは、適用するアドレス範囲が異なる第２メモリ保護機能によって構成され、
前記ＣＰＵは、前記第１メモリ保護機能および前記第２メモリ保護機能を適用するアドレス範囲を、前記実行アドレスに基づいて設定し、
前記第１メモリ保護機能および前記第２メモリ保護機能は、前記ＣＰＵがアクセスした前記実行アドレスが前記アドレス範囲外であることをもって、前記実行アドレスに前記ＣＰＵがアクセスしたことを検知して、前記割り込みを発生させる
請求項１に記載の車載制御装置。