(57)【特許請求の範囲】
【請求項１】
記憶した内容を書き換え可能な書換可能領域と、書き換えが禁止される書換禁止領域とを有する不揮発性メモリ（２０ｃ）と、
前記不揮発性メモリの前記書換可能領域にはメインプログラム（２０ｃ２）が記憶され、前記書換禁止領域には、前記メインプログラムのオンボード書換を行うためのオンボード書換プログラム（２０ｃ３）が記憶され、前記メインプログラムと前記オンボード書換プログラムとを選択的に実行するＣＰＵ（２０ａ）と、を備えたマイクロコンピュータ（２０）であって、
前記不揮発性メモリの前記書換禁止領域には、さらに、所定の割り込み要因の発生時に、分岐すべきアドレスを指示する割り込みベクタ（２０ｃ１）が記憶されており、
前記割り込みベクタ（２０ｃ１）が指示するアドレスを利用し、前記メインプログラムと前記オンボード書換プログラムとのいずれが実行されているかに応じて、前記ＣＰＵがアクセスすべきアドレスを、前記メインプログラム内のアドレスと前記オンボード書換プログラム内のアドレスとのいずれかに切り換える切換手段（２０ｂ１、２０ｃ２，２０ｃ３，２０ｃ４）を備え、
前記メインプログラムは、前記所定の割り込み要因ごとに予め定められたアドレスに格納され、前記各割り込み要因に対応して実行されるべき割り込み処理プログラム（２０ｃ２１）を格納したアドレスを指示するユーザベクタ（２０ｃ２２）を有し、
前記切換手段は、前記ＣＰＵがアクセスすべきアドレスを前記メインプログラム内のアドレスに切り換える場合、前記ユーザベクタのアドレスを指定するものであり、
前記切換手段は、前記メインプログラムが実行されているとき、当該メインプログラムによる命令により、前記所定の割り込み要因ごとに、各割り込み要因に対応する前記ユーザベクタが格納されたアドレスに書き換えられ、前記オンボード書換プログラムが実行されているとき、当該オンボード書換プログラムによる命令により、前記所定の割り込み要因ごとに、各割り込み要因に対応して実行されるべき割り込み処理プログラムを格納した前記オンボード書換プログラム内のアドレスに書き換えられる可変ポインタ（２０ｂ１）を有し、
前記割り込みベクタは、発生した割り込み要因に対応する前記可変ポインタを参照して、前記ＣＰＵがアクセスすべきアドレスを提供するものであり、
前記可変ポインタは、前記メインプログラムと前記オンボード書換プログラムとが共通使用する割り込み要因に対して設定され、前記メインプログラムのみが使用する割り込み要因に関しては、前記メインプログラムと前記オンボード書換プログラムとのいずれが実行されるかによらず、該当する前記ユーザベクタが格納されたアドレスを示す固定ポインタが設定されることを特徴とするマイクロコンピュータ。
【請求項２】
前記割り込みベクタにおいて、前記所定の割り込み要因としてリセットが生じた場合、最初に、前記オンボード書換プログラムが実行されるように、前記オンボード書換プログラムの先頭アドレスが割り当てられており、それにより前記オンボード書換プログラムの実行が開始され、前記オンボード書換プログラムの実行時に、前記メインプログラムの書換要求が確認されない場合、前記オンボード書換プログラムにより、前記メインプログラムに分岐して、前記メインプログラムの実行が開始されることを特徴とする請求項１に記載のマイクロコンピュータ。
【請求項３】
記憶した内容を書き換え可能な書換可能領域と、書き換えが禁止される書換禁止領域とを有する不揮発性メモリ（２０ｃ）と、
前記不揮発性メモリの前記書換可能領域にはメインプログラム（２０ｃ２）が記憶され、前記書換禁止領域には、前記メインプログラムのオンボード書換を行うためのオンボード書換プログラム（２０ｃ３）が記憶され、前記メインプログラムと前記オンボード書換プログラムとを選択的に実行するＣＰＵ（２０ａ）と、を備えたマイクロコンピュータ（２０）であって、
前記不揮発性メモリの前記書換禁止領域には、さらに、所定の割り込み要因の発生時に、分岐すべきアドレスを指示する割り込みベクタ（２０ｃ１）が記憶されており、
前記割り込みベクタ（２０ｃ１）が指示するアドレスを利用し、前記メインプログラムと前記オンボード書換プログラムとのいずれが実行されているかに応じて、前記ＣＰＵがアクセスすべきアドレスを、前記メインプログラム内のアドレスと前記オンボード書換プログラム内のアドレスとのいずれかに切り換える切換手段（２０ｂ１、２０ｃ２，２０ｃ３，２０ｃ４）を備え、
前記メインプログラムは、前記所定の割り込み要因ごとに予め定められたアドレスに格納され、前記各割り込み要因に対応して実行されるべき割り込み処理プログラム（２０ｃ２１）を格納したアドレスを指示するユーザベクタ（２０ｃ２２）を有し、
前記切換手段は、前記ＣＰＵがアクセスすべきアドレスを前記メインプログラム内のアドレスに切り換える場合、前記ユーザベクタのアドレスを指定するものであり、
前記切換手段は、前記不揮発性メモリの書換禁止領域に記憶された割込切換プログラム（２０ｃ４）を有し、
前記割り込みベクタは、所定の割り込み要因の内、いずれかの割り込み要因が発生すると、前記ＣＰＵに対して、前記割込切換プログラムの実行を指示し、
前記割込切換プログラムは、前記割り込み要因が発生した時点のプログラムカウンタの位置から、前記メインプログラムと前記オンボード書換プログラムとのどちらを実行中であったかを判断するとともに発生した割り込み要因の種別情報を取得し、前記ＣＰＵがアクセスすべきアドレスとして、前記メインプログラムが実行中であれば、取得した割り込み要因の種別情報に対応した前記ユーザベクタを格納したアドレスを算出し、オンボード書換プログラムが実行中であれば、取得した割り込み要因の種別情報に対応して実行されるべき割り込み処理プログラムを格納したオンボード書換プログラム内のアドレスを算出するものであり、
前記割込切換プログラムは、前記メインプログラムと前記オンボード書換プログラムとが共通使用する割り込み要因に関して、前記メインプログラムと前記オンボード書換プログラムとのいずれが実行中であるかに応じて、前記メインプログラム内の前記ユーザベクタが格納されたアドレスと前記オンボード書換プログラム内のアドレスとのいずれかを算出する一方、前記メインプログラムのみが使用する割り込み要因に関しては、前記メインプログラムと前記オンボード書換プログラムとのいずれが実行されているかによらず、該当する前記ユーザベクタが格納されたアドレスを算出することを特徴とするマイクロコンピュータ。
【請求項４】
前記所定の割り込み要因としてリセットが生じた場合、最初に、前記オンボード書換プログラムが実行されるように、前記割り込みベクタもしくは前記割込切換プログラムにより、前記ＣＰＵの処理は前記オンボード書換プログラムに分岐し、それにより前記オンボード書換プログラムの実行が開始され、前記オンボード書換プログラムの実行時に、前記メインプログラムの書換要求が確認されない場合、前記オンボード書換プログラムにより、前記メインプログラムに分岐して、前記メインプログラムの実行が開始されることを特徴とする請求項３に記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書換可能な不揮発性メモリを備え、当該不揮発性メモリに記憶されたメインプログラムをオンボード書き換えするマイクロコンピュータに関する。
【背景技術】
【０００２】
例えば、特許文献１には、書き換え可能なフラッシュメモリを備えたメモリカードアダプタにおいて、ファームアップデート失敗によるシステムダウンを回避するための技術が開示されている。具体的には、オンボードでのファームアップデートが失敗した場合でも、最低限の動作を可能とするプログラムを格納する非書き換え領域をフラッシュメモリに追加するとともに、その非書き換え領域にアップデート結果の成功／失敗を判断する機能を追加している。そして、ファームアップデートが終了した後の再起動で、割り込みベクタ機能により非書き換え領域にジャンプし、非書き換え領域に格納されたアップデート結果確認手段（アップデート結果の成功／失敗を判断する機能）を起動する。アップデート結果確認手段は、書き換え結果格納領域に格納されたファームアップデートの成功、失敗情報を確認する。そして、アップデートが成功していた場合は、メインプログラムの先頭アドレスにジャンプし、新ファームで動作を開始する。一方、アップデートが失敗だった場合は、再度ファームアップデートを行う。
【０００３】
また、特許文献２には、フラッシュＥＥＰＲＯＭのオンボード書き換えを採用する場合でも、ベクタテーブルの書き換えを許可できるようにし、以ってユーザプログラム開発上の制約をなくすようにしたマイクロコンピュータが開示されている。そのため、特許文献２のマイクロコンピュータは、ＣＰＵとフラッシュＥＥＰＲＯＭとの間に、ベクタテーブルの先頭を指定するようにＣＰＵから出力されるリセットベクタアドレスに代えて、書き換え制御プログラムの先頭アドレスの格納場所を指定する代替リセットベクタアドレスをフラッシュＥＥＰＲＯＭへ供給するためのアドレス制御回路を介在させる。これにより、アドレス制御回路から出力される代替リセットベクタアドレスに基づく間接アドレス指定により書き換え制御プログラムの実行を開始することが可能となるので、ベクタテーブルをユーザプログラムとともに書き換えることが可能になる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２２８２２５号公報
【特許文献２】特開２００２−２４０４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載のものでは、割り込みベクタ機能をファームアップデート時に消去しないようにしているので、ファームアップデート後も、割り込みベクタ機能を用いて、非書き換え領域に格納されたプログラムを実行させることができる。しかしながら、このようにすると、割り込みベクタ機能の内容の変更が不可能となるため、メインプログラムの改版時であっても、割り込みベクタ機能により指定される割り込み処理のプログラム配置アドレスを自由に変更できないという制約を受ける。
【０００６】
その点、特許文献２に記載のものでは、ユーザプログラム（メインプログラム）とともにベクタテーブルを書き換え可能としているので、割り込み処理のプログラム配置アドレスを自由に変更することが可能となっている。このようなベクタテーブルを用いたベクタ間接アドレス指定の採用により、プログラム全体のサイズを小さくできるという効果が得られる。
【０００７】
しかしながら、引用文献２に記載のものでは、ベクタテーブルを書き換え可能とするために、ＣＰＵとフラッシュＥＥＰＲＯＭとの間に、代替リセットベクタアドレスを出力するためのアドレス制御回路を設けている。このような、ベクタテーブルに代わって、リセットベクタアドレスを出力するための専用の回路を設けることにより、マイクロコンピュータの回路構成が複雑になり、コストアップの要因となってしまう。
【０００８】
本発明は、上述した点に鑑みてなされたものであり、回路構成を複雑化することなく、メインプログラムが改版される際には、割り込み処理プログラムの配置アドレスを変更可能としたマイクロコンピュータを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明に係るマイクロコンピュータ（２０）は、
記憶した内容を書き換え可能な書換可能領域と、書き換えが禁止される書換禁止領域とを有する不揮発性メモリ（２０ｃ）と、
前記不揮発性メモリの前記書換可能領域にはメインプログラム（２０ｃ２）が記憶され、前記書換禁止領域には、前記メインプログラムのオンボード書換を行うためのオンボード書換プログラム（２０ｃ３）が記憶され、前記メインプログラムと前記オンボード書換プログラムとを選択的に実行するＣＰＵ（２０ａ）と、を備え、
前記不揮発性メモリの前記書換禁止領域には、さらに、所定の割り込み要因の発生時に、分岐すべきアドレスを指示する割り込みベクタ（２０ｃ１）が記憶されており、
前記割り込みベクタ（２０ｃ１）が指示するアドレスを利用し、前記メインプログラムと前記オンボード書換プログラムとのいずれが実行されているかに応じて、前記ＣＰＵがアクセスすべきアドレスを、前記メインプログラム内のアドレスと前記オンボード書換プログラム内のアドレスとのいずれかに切り換える切換手段（２０ｂ１、２０ｃ２，２０ｃ３，２０ｃ４）を備え、
前記メインプログラムは、前記所定の割り込み要因ごとに予め定められたアドレスに格納され、前記各割り込み要因に対応して実行されるべき割り込み処理プログラム（２０ｃ２１）を格納したアドレスを指示するユーザベクタ（２０ｃ２２）を有し、
前記切換手段は、前記ＣＰＵがアクセスすべきアドレスを前記メインプログラム内のアドレスに切り換える場合、前記ユーザベクタのアドレスを指定するものであり、
前記切換手段は、前記メインプログラムが実行されているとき、当該メインプログラムによる命令により、前記所定の割り込み要因ごとに、各割り込み要因に対応する前記ユーザベクタが格納されたアドレスに書き換えられ、前記オンボード書換プログラムが実行されているとき、当該オンボード書換プログラムによる命令により、前記所定の割り込み要因ごとに、各割り込み要因に対応して実行されるべき割り込み処理プログラムを格納した前記オンボード書換プログラム内のアドレスに書き換えられる可変ポインタ（２０ｂ１）を有し、
前記割り込みベクタは、発生した割り込み要因に対応する前記可変ポインタを参照して、前記ＣＰＵがアクセスすべきアドレスを提供するものであり、
前記可変ポインタは、前記メインプログラムと前記オンボード書換プログラムとが共通使用する割り込み要因に対して設定され、前記メインプログラムのみが使用する割り込み要因に関しては、前記メインプログラムと前記オンボード書換プログラムとのいずれが実行されるかによらず、該当する前記ユーザベクタが格納されたアドレスを示す固定ポインタが設定されることを特徴とする。
【００１０】
このように、本発明に係るマイクロコンピュータにおいては、まず、割り込みベクタ及びオンボード書換プログラムが書換禁止領域に記憶されているので、例えばメインプログラムの書き換えに失敗したとしても、割り込みベクタの内容は保全される。このため、その書換えを再度実行しようとした場合、割り込みベクタによりオンボード書き換えプログラムを起動することができる。このように、本発明によれば、マイクロコンピュータが全く起動しなくなるような事態の発生を回避し、再度、メインプログラムの書き換えを実施することが可能である。
【００１１】
また、本発明に係るマイクロコンピュータでは、割り込みベクタが指示するアドレスを利用し、メインプログラムとオンボード書換プログラムとのいずれが実行されているかに応じて、ＣＰＵがアクセスすべきアドレスを、メインプログラム内のアドレスとオンボード書換プログラム内のアドレスとのいずれかに切り換える切換手段を設けている。このため、メインプログラム実行時及びオンボード書換プログラムの実行時とも、上記割り込みベクタを用いた間接アドレス指定が可能となり、プログラムサイズの縮小化を図ることができる。
【００１２】
さらに、本発明に係るマイクロコンピュータでは、メインプログラムが、各割り込み要因に対応して実行されるべき割り込み処理プログラムを格納したアドレスを指示するユーザベクタを有している。このユーザベクタは、メインプログラムの記憶領域において、所定の割り込み要因ごとに予め定められたアドレスに格納されている。従って、ＣＰＵがアクセスすべきアドレスをメインプログラム内のアドレスに切り換える場合、このユーザベクタのアドレスを指定することで、割り込み要因に対応した割り込み処理プログラムを実行することが可能になる。そして、ユーザベクタは、メインプログラム内に含まれるものであり、メインプログラムの改版時に、割り込み処理プログラムの配置アドレスを変更する場合、そのアドレス変更に合わせてユーザベクタの内容を変更することが可能である。このため、本発明に係るマイクロコンピュータにおいては、メインプログラム内において、割り込み処理プログラムの配置アドレスを自由に変更することが可能となる。
【００１３】
なお、上記括弧内の参照番号は、本発明の理解を容易にすべく、後述する実施形態における具体的な構成との対応関係の一例を示すものにすぎず、なんら本発明の範囲を制限することを意図したものではない。また、上述した特徴以外の本発明の特徴に関しては、後述する実施形態の説明及び添付図面から明らかになる。
【図面の簡単な説明】
【００１４】
【図１】実施形態によるエンジン制御コンピュータ２０を含む車両制御システムの全体構成を示す構成図である。
【図２】オンボード書換プログラムの実行中に、割り込み要因としてのＣＡＮ受信が発生した場合の、処理の分岐の様子を示す説明図である。
【図３】メインプログラムの実行中に、割り込み要因としてのＣＡＮ受信が発生した場合の、処理の分岐の様子を示す説明図である。
【図４】各割り込み要因に対するそれぞれのポインタに関して、可変ポインタ及び固定ポインタを設定した一例を示す説明図である。
【図５】リセットが生じたときの、エンジン制御コンピュータにおける処理の流れを示すフローチャートである。
【図６】第２実施形態における、割り込み切換プログラムの処理内容を示すフローチャートである。
【図７】オンボード書換プログラムの実行中に、ある割り込み要因が発生した場合の、処理の分岐の様子を示す説明図である。
【図８】メインプログラムの実行中に、ある割り込み要因が発生した場合の、処理の分岐の様子を示す説明図である。
【図９】割り込み要因の種別ごとの、例外コード、割り込みベクタのアドレス、及び発生要因を示した図表である。
【図１０】割り込み要因の種別ごとの、ユーザベクタのアドレス、及びユーザベクタの記述内容の概要を示した図表である。
【発明を実施するための形態】
【００１５】
（第１実施形態）
以下、本発明の第１実施形態によるマイクロコンピュータについて、図面を参照しつつ詳細に説明する。なお、本実施形態においては、本発明に係るマイクロコンピュータを、車両に搭載されたエンジンを制御するコンピュータに適用した例について説明する。しかしながら、本発明に係るマイクロコンピュータは、その適用対象がエンジン制御コンピュータに限られるわけではなく、他の用途のコンピュータにも適用可能なことは言うまでもない。
【００１６】
図１は、本実施形態によるエンジン制御コンピュータ２０を含む車両制御システムの全体構成を示している。図１に示すように、エンジンやエアコン、メータなどの車両の各種の車載機器を制御する制御コンピュータが車両に多数搭載され、それらの制御コンピュータが、データの共有化や協調制御を行うために、通信ネットワークを介して相互に通信可能に接続されている。
【００１７】
具体的には、車両制御システムは、制御コンピュータとして、エンジン制御コンピュータ２０、エアコン制御コンピュータ３０、メータ制御コンピュータ４０、及び走行制御ユコンピュータ５０などを含む。これらの制御コンピュータ２０〜５０は、車両に設けられたローカルエリアネットワーク（車内ＬＡＮ）６０を介して相互に通信可能に接続されている。この相互通信においては、通信プロトコルとして、例えばＣＡＮプロトコルが用いられる。
【００１８】
エンジン制御コンピュータ２０は、制御用のメインプログラムに従って各種の演算処理を行うＣＰＵ２０ａ、ＣＰＵ２０ａによる演算処理結果等を一時的に保存するＲＡＭ２０ｂ、制御用のメインプログラム２０ｃ２が書き込まれて、その書き込まれたメインプログラム２０ｃ２を記憶する不揮発性メモリとしてのフラッシュＲＯＭ２０ｃ、及び他の制御コンピュータ等と相互通信を行うための通信部２０ｄを有している。
【００１９】
さらに、エンジン制御コンピュータ２０は、図示していないが、エンジンの動作状態を検出する各種センサからのセンサ情報を入力する入力回路や、エンジンに取り付けられたインジェクタやイグナイタ等のアクチュエータを駆動する駆動信号を出力する出力回路等を備えている。
【００２０】
このような構成を備えることにより、エンジン制御コンピュータ２０は、フラッシュＲＯＭ２０ｃに記憶されたメインプログラム２０ｃ２に従って、入力回路から入力されるセンサ情報に基づいて駆動信号を生成し、その生成した駆動信号をアクチュエータに出力することができる。その結果、エンジンの運転状態を適切に制御することが可能になる。
【００２１】
エンジン制御コンピュータ２０のフラッシュＲＯＭ２０ｃは、図２に示すように、電気的にデータの書き換え（詳しくは消去及び書き込み）が可能な書換領域と、データの書き換えが禁止された非書換領域とを有する。上述したメインプログラム２０ｃ２は、フラッシュＲＯＭ２０ｃの書換領域に書き込まれて記憶される。また、フラッシュＲＯＭ２０ｃの非書換領域には、メインプログラム２０ｃ２のオンボード書換を行うためのオンボード書換プログラム２０ｃ３が記憶されている。このオンボード書換とは、エンジン制御コンピュータ２０を車両に搭載したまま、車内ＬＡＮ６０に有線、または無線で接続されたプログラム書換装置１０から提供される更新プログラムを用いて、メインプログラム２０ｃ２の書換えを行うことを言う。
【００２２】
さらに、フラッシュＲＯＭ２０ｃの非書換領域には、割り込みベクタ２０ｃ１が格納されている。この割り込みベクタ２０ｃ１は、予め定められた割り込み要因が生じたとき、ＲＡＭ２０ｂにおいて、各割り込み要因ごとに設定されるポインタ２０ｂ１を参照して、ＣＰＵ２０ａがアクセスすべき分岐先のアドレスを指示するものである。つまり、割り込みベクタ２０ｃ１には、対応するポインタ２０ｂ１が示すアドレスへの分岐命令が記述される。
【００２３】
ここで、ＲＡＭ２０ｂにおいて、各割り込み要因ごとに設定されるポインタ２０ｂ１について説明する。
【００２４】
ポインタは、各割り込み要因ごとに、ＲＡＭ２０ｂの予め定められたアドレスによって特定される記憶領域、もしくはその記憶領域に保存された分岐先のアドレス値を意味する用語として使用される。ポインタ２０ｂ１としてのアドレス値は、エンジン制御コンピュータ２０が起動され、オンボード書換プログラム２０ｃ３あるいはメインプログラム２０ｃ２が実行されると、それらのプログラムの機能によって書き込まれるように、オンボード書換プログラム２０ｃ３及びメインプログラム２０ｃ２が予めプログラムされている。
【００２５】
例えば、オンボード書換プログラム２０ｃ３が実行されるときには、当該オンボード書換プログラム２０ｃ３による命令により、各割り込み要因に対応するＲＡＭ２０ｂのそれぞれの記憶領域に、各割り込み要因に対応して実行されるべきオンボード書換プログラム２０ｃ３内の割り込み処理プログラムを格納した先頭アドレスを示すアドレス値が書き込まれる。
【００２６】
例えば割り込み要因として、車内ＬＡＮ６０を介して信号を受信した場合（ＣＡＮ受信）、割り込みベクタ２０ｃ１は、ＣＡＮ受信に対応するポインタ２０ｂ１のアドレス値を参照する。このとき、オンボード書換プログラム２０ｃ３が実行中であるとすると、ＣＡＮ受信に対応するポインタ２０ｂ１には、オンボード書換プログラム２０ｃ３内のＣＡＮ受信割り込み処理プログラム２０ｃ３１の先頭アドレスを示すアドレス値が書き込まれている。割り込みベクタ２０ｃ１は、そのポインタ２０ｂ１のアドレス値を参照して、図２に示すように、ＣＰＵ２０ａに対して、オンボード書換プログラム２０ｃ３内のＣＡＮ受信割り込み処理プログラム２０ｃ３１の先頭アドレスに分岐するよう指示する。これにより、ＣＰＵ２０ａは、オンボード書換プログラム２０ｃ３内のＣＡＮ受信割り込み処理プログラム２０ｃ３１の実行を開始する。
【００２７】
一方、メインプログラム２０ｃ２が実行されているときには、当該メインプログラム２０ｃ２による命令により、各割り込み要因に対応するＲＡＭ２０ｂのそれぞれの記憶領域に、ＣＰＵ２０ａが分岐すべきメインプログラム２０ｃ２内のアドレスを示すアドレス値が書き込まれる。
【００２８】
ここで、本実施形態においては、図２、３に示すように、メインプログラム２０ｃ２は、ユーザベクタ２０ｃ２２を含んでいる。このユーザベクタ２０ｃ２２は、各割り込み要因に対応して実行されるべき、メインプログラム２０ｃ２内の割り込み処理プログラムを格納した先頭アドレスを指示するべく、そのアドレス値を記憶したものである。そして、ユーザベクタ２０ｃ２２は、メインプログラム２０ｃ２が格納されるフラッシュＲＯＭ２０ｃの書換領域において、各割り込み要因ごとに予め定められたアドレスに格納されている。
【００２９】
上述したように、メインプログラム２０ｃ２が、各割り込み要因に対するポインタ２０ｂ１としての記憶領域にアドレス値を書き込む際には、該当するユーザベクタ２０ｃ２２のアドレスを書き込む。従って、ユーザベクタ２０ｃ２２を経由して、割り込み要因に対応する、メインプログラム２０ｃ２内の割り込み処理プログラム２０ｃ２１を実行することが可能になる。そして、ユーザベクタ２０ｃ２２は、メインプログラム２０ｃ２内に含まれるものであるため、メインプログラム２０ｃ２の改版時に、割り込み処理プログラム２０ｃ２１の配置アドレスを変更する場合、そのアドレス変更に合わせてユーザベクタ２０ｃ２２の内容を変更することが可能である。このため、本実施形態に係るエンジン制御コンピュータ２０においては、メインプログラム２０ｃ２内において、割り込み処理プログラム２０ｃ２１の配置アドレスを自由に変更することが可能となる。
【００３０】
図３は、メインプログラム２０ｃ２の実行中に、割り込み要因としてのＣＡＮ受信が発生した場合の、処理の分岐の様子を示している。メインプログラム２０ｃ２が実行中であるので、各割り込み要因に対するポインタ２０ｂ１には、それぞれ、該当するユーザベクタ２０ｃ２１のアドレスが書き込まれている。そのため、一旦、ＣＰＵ２０ａによる処理は、ＣＡＮ受信に対応するアドレスのユーザベクタ２０ｃ２１に分岐し、さらにそのユーザベクタ２０ｃ２１によって指示されるアドレスに分岐する。これにより、ＣＰＵ２０ａは、メインプログラム２０ｃ２内のＣＡＮ受信割り込み処理プログラム２０ｃ２１の実行を開始することが可能になる。
【００３１】
このように、オンボード書換プログラム２０ｃ３とメインプログラム２０ｃ２との両方で使用される割り込み要因に対するポインタ２０ｂ１は、オンボード書換プログラム２０ｃ３とメインプログラム２０ｃ２との間で、実行中のプログラムが切り替えられるごとに、記憶しているアドレス値が書き換えられて変化する。従って、このようなポインタ２０ｂ１を可変ポインタと呼ぶこととする。
【００３２】
一方、オンボード書換プログラム２０ｃ３は、メインプログラム２０ｃ２に比較して機能が限定されており、概して、使用する割り込み要因もメインプログラム２０ｃ２よりも少ないことが多い。すなわち、割り込み要因の中には、メインプログラム２０ｃ２では使用されるが、オンボード書換プログラム２０ｃ３では使用されないものが存在する。このようなメインプログラム２０ｃ２のみで使用される割り込み要因に対するポインタ２０ｂ１は、常に、該当するユーザベクタ２０ｃ２２のアドレスを指示するものであれば良い。従って、この場合、オンボード書換プログラム２０ｃ３とメインプログラム２０ｃ２とのいずれが実行されているかに係わらず、ポインタ２０ｂ１のアドレス値は固定されるので、このようなポインタ２０ｂ１を固定ポインタと呼ぶこととする。
【００３３】
図４は、各割り込み要因に対するそれぞれのポインタ２０ｂ１に関して、可変ポインタ及び固定ポインタを設定した一例を示している。このように、各割り込み要因に対するポインタ２０ｂ１に固定ポインタが含まれる場合、オンボード書換プログラム２０ｃ３によっても固定のアドレス値を固定ポインタに設定する必要がある。この点も、ユーザベクタ２０ｃ２２を使用する理由の１つである。つまり、オンボード書換プログラム２０ｃ３は、一旦、フラッシュＲＯＭ２０ｃに書き込まれると、その後、書き換えられることはない。このようなオンボード書換プログラム２０ｃ３によって固定ポインタに書き込まれる固定アドレスにて、該当するユーザベクタ２０ｃ２２を指定しておけば、実際に実行される割り込み処理プログラム２０ｃ２１の配置アドレスがメインプログラム２０ｃ２内において変更されても、なんら支障なく、その割り込み処理プログラム２０ｃ２１が実行されるようになる。換言すると、ユーザベクタ２０ｃ２２を経由することなく、可変ポインタ及び固定ポインタによって、直接、割り込み処理プログラム２０ｃ２１の先頭アドレスを指定しようとした場合、オンボード書換プログラム２０ｃ３によっても固定ポインタのアドレスが指定されることを考慮すると、メインプログラム２０ｃ２でしか使用しない割り込み要因に対する割り込み処理プログラム（例えば、外部信号入力１に起因する割り込み処理プログラム）のアドレスを変更することができなくなり、プログラム作成上の制約が生じてしまうのである。
【００３４】
このように、本実施形態によるエンジン制御コンピュータ２０においては、可変ポインタ及び割り込みベクタ２０ｃ１を利用することにより、メインプログラム２０ｃ２とオンボード書換プログラム２０ｃ３とのいずれが実行されているかに応じて、ＣＰＵ２０ａがアクセスすべきアドレスを、メインプログラム２０ｃ２内のアドレス（すなわち、ユーザベクタ２０ｃ２２のアドレス）とオンボード書換プログラム２０ｃ３内のアドレスとのいずれかに切り換えている。このため、メインプログラム２０ｃ２の実行時及びオンボード書換プログラム２０ｃ３の実行時とも、割り込みベクタ２０ｃ１を用いた間接アドレス指定が可能となり、プログラムサイズの縮小化を図ることができる。
【００３５】
次に、メインプログラム２０ｃ２の書き換え処理について説明する。メインプログラム２０ｃ２の書き換えは、図１に示すように、車内ＬＡＮ６０にプログラム書換装置１０が接続され、このプログラム書換装置１０から、メインプログラム２０ｃ２の書込要求が出された場合に行われる。このプログラム書換装置１０は、エンジン制御コンピュータ２０におけるＣＰＵ２０ａに、フラッシュＲＯＭ２０ｃの書き換えを行わせるために、ＣＰＵ１０ａ，メモリ１０ｂ及び通信部１０ｃ等の構成を備えている。
【００３６】
具体的には、プログラム書換装置１０のＣＰＵ１０ａは、まず、通信部１０ｃ及び車内ＬＡＮ６０を介して、書換処理対象であるエンジン制御コンピュータ２０に書換要求を出力する。この書換要求を受信すると、エンジン制御コンピュータ２０では、オンボード書換プログラム２０ｃ３が書換処理の実行を開始し、プログラム書換装置１０から送信されて来る書換プログラムデータをフラッシュＲＯＭ２０ｃの書換領域に書き込む処理を行う。
【００３７】
なお、本実施形態によるエンジン制御コンピュータ２０では、割り込み要因としてリセットが生じたときには、最初に、オンボード書換プログラム２０ｃ３が実行されるように、割り込みベクタ２０ｃ１においてオンボード書換プログラム２０ｃ３の先頭アドレスが割り当てられている。それにより、オンボード書換プログラム２０ｃ３が開始され、上述したポインタ２０ｂ１へのアドレス値の書き込み等の処理が実行可能となる。そして、オンボード書換プログラム２０ｃ３の実行時に、メインプログラム２０ｃ２の書換要求が確認されない場合、当該オンボード書換プログラム２０ｃ３により、分岐先アドレスとして、リセットに対応するアドレスのユーザベクタ２０ｃ２２が指示される。このユーザベクタ２０ｃ２２には、メインプログラムの先頭アドレスに分岐することが記述されている。従って、メインプログラム２０ｃ２が開始され、メインプログラム２０ｃ２によりポインタ２０ｂ１へのアドレス値の書き込み等の処理が実行可能となる。
【００３８】
図５は、リセットが生じたときの、エンジン制御コンピュータ２０における処理の流れを示すフローチャートである。リセットが生じて、オンボード書換プログラム２０ｃ３の実行が開始されると、まず、ステップＳ１００において、オンボード書換プログラム２０ｃ３内において、各割り込み処理プログラムが格納された先頭アドレスを、各割り込み要因に対するそれぞれのポインタ２０ｂ１に設定する。これにより、オンボード書換プログラム２０ｃ３の実行中にいずれかの割り込み要因が発生すると、オンボード書換プログラム２０ｃ３内の該当する割り込み処理プログラムが実行されるようになる。
【００３９】
続くステップＳ１１０では、プログラム書換装置１０からメインプログラム２０ｃ２の書換要求を受信したか否かを判定する。すなわち、プログラム書換装置１０が車内ＬＡＮ６０に接続され、かつ作業者の操作によってプログラム書換装置１０から書換要求が出力された場合には、エンジン制御コンピュータ２０において、その書換要求が受信され、ステップＳ１１０の判定処理において「ＹＥＳ」と判定されることになる。一方、プログラム書換装置１０が車内ＬＡＮ６０に接続されていない場合等は、ステップＳ１１０の判定処理において「ＮＯ」と判定される。
【００４０】
ステップＳ１１０の判定処理において「ＹＥＳ」と判定された場合には、ステップＳ１２０に進んで、書換処理を実行する。このステップＳ１２０の書込処理では、上述したように、プログラム書換装置１０から分割して送信されてくるメインプログラムデータを順番にフラッシュＲＯＭ２０ｃの書換領域に書き込んでいく。そして、ステップＳ１３０において、すべてのプログラムデータの書き込みが終了したと判定されると、図５に示す処理を終了する。一方、ステップＳ１１０の判定処理において「ＮＯ」と判定された場合には、ステップＳ１４０に進んで、ユーザベクタ２０ｃ２２を経由して、メインプログラム２０ｃ２の先頭アドレスに分岐し、メインプログラム２０ｃ２の実行を開始する。すると、メインプログラム２０ｃ２内において、各割り込み処理プログラムが格納された先頭アドレスが、各割り込み要因に対するそれぞれのポインタ２０ｂ１に設定される。これにより、メインプログラム２０ｃ２の実行中にいずれかの割り込み要因が発生すると、メインプログラム２０ｃ２内の該当する割り込み処理プログラムが実行されるようになる。また、メインプログラム２０ｃ２の実行により、エンジン制御処理が開始される。
【００４１】
（第２実施形態）
次に本発明の第２実施形態に係るエンジン制御コンピュータについて説明する。本第２実施形態におけるエンジン制御コンピュータは、上述した第１実施形態のエンジン制御コンピュータと同様の構成を備えるので、構成に関する説明は省略する。
【００４２】
上述した第１実施形態に係るエンジン制御コンピュータ２０においては、いずれかの割り込み要因が生じたときに、メインプログラム及びオンボード書換プログラムによって書換えられるポインタ２０ｂ１を参照して、割り込みベクタ２０ｃ１が、分岐先アドレスをＣＰＵ２０ａに指示するものであった。
【００４３】
本実施形態では、第１実施形態のようなポインタ２０ｂ１は用いない。その代わりに、フラッシュＲＯＭ２０ｃの非書換領域に割り込み切換プログラムを設ける。このように、ＲＡＭ２０ｂに設定されるポインタ２０ｂ１を用いないので、ＣＰＵ２０ａによる処理が、例えば、いわゆるＲＡＭ化けなどにより不測の分岐先に分岐することを確実に防止することができる。
【００４４】
以下、上述した割り込み切換プログラムについて、図６のフローチャート及び図７〜図１０の説明図を用いて詳しく説明する。なお、本実施形態に係るマイクロコンピュータ２０では、いずれかの割り込み要因が生じた場合、ＣＰＵ２０ａの処理が、割り込みベクタ２０ｃ１により、割り込み切換プログラム２０ｃ４の先頭アドレスに分岐して、割り込み切換プログラム２０ｃ４を実行するように設定されている。
【００４５】
図６は、割り込み切換プログラムによる処理内容を示したフローチャートであり、まず、ステップＳ２００において、割り込み要因の例外コードを取得する。
【００４６】
ここで、本実施形態では、図９に示されるように、割り込み要因の種別ごとに、例外コードが定められている。従って、この例外コードから、いずれの割り込み要因が発生したかを特定することができる。なお、割り込み要因が発生したとき、それに対応する例外コードが、コンピュータ内部のレジスタに記憶される。
【００４７】
従って、ステップＳ２００の処理では、コンピュータ内部のレジスタから、割り込み要因の種別を表す例外コードを読み出して取得するのである。
【００４８】
続くステップＳ２１０では、割り込み要因が発生したときのプログラムカウンタ（ＰＣ）の値を読み込んで取得する。プログラムカウンタは、割り込み要因の発生前に、ＣＰＵ２０ａが処理していたプログラムのアドレスを示しているので、このプログラムカウンタの値から、ＣＰＵ２０ａが、割り込み要因の発生前に、メインプログラム２０ｃ２を実行していたのか、オンボード書換プログラム２０ｃ３を実行していたのかを判別することができる。
【００４９】
そこで、ステップＳ２２０では、上述したプログラムカウンタの位置が、実行されていたプログラムがメインプログラム領域内であることを示しているか、それともオンボード書換プログラム領域内であることを示しているかを判別する。この判別処理において、オンボード書き込みプログラム内と判別された場合には、ステップＳ２３０に進んで、オンボード書込プログラム領域内において、発生した割り込み要因に応じて実行されるべき割り込み処理プログラムが格納された先頭アドレスを算出する。ただし、オンボード書換プログラムにおいて、使用していない割り込み要因に関しては、割り込み切換プログラム２０ｃ４は、対応するユーザベクタ２０ｃ２２のアドレスを算出するようにプログラムされている。
【００５０】
一方、メインプログラム領域内であると判別された場合には、ステップＳ２４０に進み、発生した割り込み要因に応じたユーザベクタ２０ｃ２２のアドレスを算出する。
【００５１】
ここで、本実施形態においては、図１０に示すように、ユーザベクタ２０ｃ２２は、割り込み要因の種別やその配置順に関して、割り込みベクタを写像したものとなっている。特に、ユーザベクタ２０ｃ２２のアドレスが、ユーザベクタ２０ｃ２２の先頭アドレス（０００１００００H）に、上述した例外コードを加算した加算結果が、各割り込み要因に対応するユーザベクタ２０ｃ２２のアドレスとなるように、例外コード及び各ユーザベクタ２０ｃ２２のアドレスが設定されている。従って、ユーザベクタ２０ｃ２２の先頭アドレスと例外コードを加算することにより、分岐すべきユーザベクタ２０ｃ２２のアドレスを求めることができる。
【００５２】
図７は、オンボード書換プログラム２０ｃ３の実行中に、ある割り込み要因が発生した場合の、処理の分岐の様子を示している。オンボード書換プログラム２０ｃ３を実行中であるので、割り込み切換プログラム２０ｃ４は、オンボード書込プログラム領域内において、発生した割り込み要因に応じて実行されるべき割り込み処理プログラムが格納された先頭アドレスを算出する。すると、ＣＰＵ２０ａによる処理は、算出されたアドレスに分岐し、オンオード書換プログラム２０ｃ３内の割り込み処理プログラムの実行を開始する。
【００５３】
また、図８は、メインプログラム２０ｃ２の実行中に、ある割り込み要因が発生した場合の、処理の分岐の様子を示している。メインプログラム２０ｃ２が実行中であるので、割り込み切換プログラム２０ｃ４は、発生した割り込み要因に対応するユーザベクタ２０ｃ２２のアドレスを算出する。すると、ＣＰＵ２０ａによる処理は、算出されたアドレスのユーザベクタ２０ｃ２２に移る。ユーザベクタ２０ｃ２２には、各割り込み要因に対して実行されるべき割り込み処理プログラムの先頭アドレスなどが記述されている。このため、上述した第１実施形態と同様に、ユーザベクタ２０ｃ２２を経由して、割り込み要因に対応する、メインプログラム２０ｃ２内の割り込み処理プログラムを実行することが可能になる。
【００５４】
なお、割り込み処理プログラムは、割り込み要因としてリセットが生じたときには、まず、オンボード書換プログラムが実行されるように、オンボード書換プログラムの先頭アドレスを算出する。それにより、オンボード書換プログラム２０ｃ３が実行されている間に、メインプログラム２０ｃ２の書換要求が確認されない場合、当該オンボード書換プログラム２０ｃ３は、分岐先アドレスとしてユーザベクタ２０ｃ２２の先頭アドレスを指示する。先頭アドレスのユーザベクタ２０ｃ２２には、メインプログラムの先頭アドレスに分岐することが記述されている。従って、ユーザベクタ２０ｃ２２を介して、メインプログラム２０ｃ２の実行が開始される。
【００５５】
また、割り込み要因としてリセットが生じたときには、割り込み処理プログラムを介してではなく、割り込みベクタから直接オンボード書換プログラムに分岐するようにしても良い。
【符号の説明】
【００５６】
１０  メモリ書換装置
２０  エンジン制御ユニット
２０ａ  ＣＰＵ
２０ｂ  ＲＡＭ
２０ｃ  フラッシュＲＯＭ
２０ｄ  通信部
３０  エアコン制御ユニット
４０  メータ制御ユニット
５０  走行制御ユニット
６０  車内ＬＡＮ
【図１】
0005590069.tif 000002
【図２】
0005590069.tif 000003
【図３】
0005590069.tif 000004
【図４】
0005590069.tif 000005
【図５】
0005590069.tif 000006
【図６】
0005590069.tif 000007
【図７】
0005590069.tif 000008
【図８】
0005590069.tif 000009
【図９】
0005590069.tif 000010
【図１０】
0005590069.tif 000011