(57)【特許請求の範囲】
【請求項１】
所定の制御対象を制御するための制御プログラムを記憶する記憶領域が設けられ、記憶内容の書き換えが可能な不揮発性メモリ（３）と、
前記不揮発性メモリに記憶された前記制御プログラムに従って処理を行うように構成された演算部（１１）とを備え、
予め設定された書換条件が成立した場合には、前記不揮発性メモリに記憶された前記制御プログラムの内容を書き換える書換処理を行うように構成された電子制御装置（１）であって、
前記不揮発性メモリの前記記憶領域は、互いに領域が重複しないように予め設定された複数の分割記憶領域（３１，３２）に分割され、
前記書換処理によって前記制御プログラムの内容を書き換える前記記憶領域として、前記複数の分割記憶領域のうちの何れか１つを選択して切り替えることができる書換切替手段（１２，Ｓ２４０，Ｓ７２０）と、
前記制御プログラムに従って処理を行うために前記演算部が前記制御プログラムを読み込む前記不揮発性メモリの前記記憶領域として、前記複数の分割記憶領域のうちの何れか１つを選択して切り替えることができる読込切替手段（１２，Ｓ２３０，Ｓ７１０）と、
前記書換処理による前記制御プログラムの書き換えが完了した後に、前記書換処理の動作を停止させる第１停止手段（Ｓ６０，Ｓ４９０，Ｓ６４０）と、
前記書換処理による前記制御プログラムの書き換えが完了した後に、前記制御プログラムの中で前記書換処理により内容が書き換えられた部分である書換対象の処理を停止させてもよいことを示す予め設定された停止判定条件が成立したか否かを判断し、前記停止判定条件が成立した場合に、前記書換対象の処理の動作を停止させる第２停止手段（Ｓ１４０，Ｓ６４０）とを備え、
前記読込切替手段は、
前記第１停止手段により前記書換処理の動作が停止し、且つ、前記第２停止手段により前記書換対象の処理の動作が停止した後に、前記書換処理により前記制御プログラムが書き換えられた前記分割記憶領域を選択して切り替え、
前記書換切替手段は、
前記書換処理によって前記制御プログラムの内容を書き換える前記記憶領域として、前記複数の分割記憶領域のうち、前記読込切替手段が選択しているのとは異なる前記分割記憶領域を選択して切り替え、
前記演算部は、単一のコアのリソースを時分割して使用することで仮想的に複数のコア（４１，４２）が存在しているように動作し、
前記演算部において仮想的に存在しているコアを仮想コア（４１，４２）として、複数の前記仮想コアのうち、１つの前記仮想コア（４２）は前記書換処理を実行し、前記書換処理を実行する前記仮想コアとは異なる別の１つの前記仮想コア（４１）は前記制御プログラムを実行するように構成され、
前記第１停止手段（Ｓ６４０）は、前記書換処理を実行する前記仮想コアの動作を停止させることにより、前記書換処理の動作を停止させ、
前記第２停止手段（Ｓ６４０）は、前記制御プログラムを実行する前記仮想コアの動作を停止させることにより、前記書換対象の処理を停止させる
ことを特徴とする電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶したプログラムを書き換え可能な電子制御装置に関する。
【背景技術】
【０００２】
従来、例えば自動車のエンジンやトランスミッション等を制御する電子制御装置として、電気的に記憶内容の書き換え（詳しくは、データの消去および書き込み）が可能なフラッシュメモリやＥＥＰＲＯＭ等の書換可能不揮発性メモリを備え、その書換可能不揮発性メモリに記憶された制御プログラムを書き換え可能なものが知られている。
【０００３】
この種の電子制御装置が搭載された車両では、車両の所有者がカーディーラに車両を持ち込み、カーディーラの作業者が専用の書換装置を用いて書換作業を行うことにより、制御プログラムを書き換えることが一般的である（例えば、特許文献１を参照）。
【０００４】
しかし将来的には、ユーザがプログラムをカスタマイズする場合、またはプログラムを緊急に書き換える必要が生じた場合などにおいて、プログラムによる機能が動作している状態でプログラムの書換えを実施し、新しいプログラムによる動作に速やかに切り替えるというニーズが発生すると考えられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−２２０５１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、プログラムの実行中に書き換え又は切り替えを行うと、プログラム実行中にデータの不整合が発生し、プログラムが正常に動作しなくなる可能性があるという問題があった。例えば、「Ａ→Ｂ→Ｃ」という一連の処理において、「Ａ」,「Ｃ」が用いるデータ［Ｄ１］が同一であるという条件に基づいてプログラムが設計されている場合において、「Ｂ」の処理実行中のタイミングで［Ｄ１］を書き換えてしまうと、「Ｃ」の処理の結果が正しくならない。
【０００７】
本発明は、こうした問題に鑑みてなされたものであり、プログラム実行中にプログラムの書き換え及び切り替えを行うことができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するためになされた発明は、所定の制御対象を制御するための制御プログラムを記憶する記憶領域が設けられ、記憶内容の書き換えが可能な不揮発性メモリと、不揮発性メモリに記憶された制御プログラムに従って処理を行うように構成された演算部とを備え、予め設定された書換条件が成立した場合には、不揮発性メモリに記憶された制御プログラムの内容を書き換える書換処理を行うように構成された電子制御装置であって、不揮発性メモリの記憶領域は、互いに領域が重複しないように予め設定された複数の分割記憶領域に分割され、書換切替手段は、書換処理によって制御プログラムの内容を書き換える記憶領域として、複数の分割記憶領域のうちの何れか１つを選択して切り替えることができるとともに、読込切替手段は、制御プログラムに従って処理を行うために演算部が制御プログラムを読み込む不揮発性メモリの記憶領域として、複数の分割記憶領域のうちの何れか１つを選択して切り替えることができる。そして書換切替手段は、書換処理によって制御プログラムの内容を書き換える記憶領域として、複数の分割記憶領域のうち、読込切替手段が選択しているのとは異なる分割記憶領域を選択して切り替える。
【０００９】
これにより、制御プログラムに従って処理を行うために演算部が制御プログラムを読み込む分割記憶領域（以下、読込用分割記憶領域という）から読み込まれた制御プログラムに従った処理を演算部が実行している最中に書換処理が行われても、読込用分割記憶領域に記憶されている制御プログラムが書き換えられることがない。このため、制御プログラムの実行中であっても制御プログラムを書き換えることができる。
【００１０】
さらに第１停止手段が、書換処理による制御プログラムの書き換えが完了した後に、書換処理の動作を停止させるとともに、第２停止手段が、書換処理による制御プログラムの書き換えが完了した後に、制御プログラムの中で書換処理により内容が書き換えられた部分である書換対象の処理を停止させてもよいことを示す予め設定された停止判定条件が成立したか否かを判断し、停止判定条件が成立した場合に、書換対象の処理の動作を停止させる。そして読込切替手段は、第１停止手段により書換処理の動作が停止し、且つ、第２停止手段により書換対象の処理の動作が停止した後に、書換処理により制御プログラムが書き換えられた分割記憶領域を選択して切り替える。
【００１１】
このように構成された電子制御装置では、書換処理による制御プログラムの書き換えが完了した後に、書換処理により書き換えられた制御プログラムの内容、すなわち上記の書換対象の内容に応じて、書換対象の処理を停止させるのに適切なタイミングで、書換対象の処理を停止させた後に、不揮発性メモリの記憶領域から読み込む制御プログラムを切り替えることができる。このため、制御プログラムの実行中に読み込む制御プログラムを切り替えることにより、データの不整合が発生するということがなくなり、制御プログラムの実行中であっても、書き換えられた制御プログラムに切り替えることができる。
【図面の簡単な説明】
【００１２】
【図１】第１，２実施形態のＥＣＵ１の構成を示すブロック図である。
【図２】ＭＭＵ１２によるアドレス変換方法を説明する図である。
【図３】第１実施形態の書換制御処理を示すフローチャートである。
【図４】第１実施形態の切替準備処理を示すフローチャートである。
【図５】第１実施形態の切替処理を示すフローチャートである。
【図６】ＭＭＵ１２によるプログラム切替方法を説明する図である。
【図７】第１実施形態のコア１１の動作を示すタイミングチャートである。
【図８】第２実施形態の書換制御処理を示すフローチャートである。
【図９】第２実施形態のコア１１の動作を示すタイミングチャートである。
【図１０】第３実施形態のＥＣＵ１の構成を示すブロック図である。
【図１１】第３実施形態の書換制御処理を示すフローチャートである。
【図１２】第３実施形態の切替準備処理を示すフローチャートである。
【図１３】第３実施形態の切替処理を示すフローチャートである。
【図１４】第３実施形態のコア１１の動作を示すタイミングチャートである。
【発明を実施するための形態】
【００１３】
（第１実施形態）
以下に本発明の第１実施形態を図面とともに説明する。
本実施形態の電子制御装置（以下、ＥＣＵという）１は、車両に搭載され、図１に示すように、車両のエンジンＥＧの制御を行う。
【００１４】
ＥＣＵ１は、ＣＰＵ（中央演算装置）２、フラッシュＲＯＭ３、ＲＡＭ４、入出力回路５、および通信インターフェース６と、これらを相互に接続するバス７とを備える。
フラッシュＲＯＭ３は、ＣＰＵ２によって実行されるプログラムを格納するための不揮発性メモリであり、後述の車両制御プログラム２１を格納するために第１記憶領域３１と第２記憶領域３２とが設けられている。
【００１５】
ＲＡＭ４は、ＣＰＵ２の演算結果等を一時格納するための揮発性メモリである。
入出力回路５は、エンジンＥＧの運転状態を検出する様々なセンサからの信号を入力して波形処理を行うとともに、ＣＰＵ２からの制御信号に応じて、エンジンＥＧに取り付けられた点火装置やインジェクタ等の電気負荷へ駆動信号を出力する。
【００１６】
通信インターフェース（以下、通信Ｉ／Ｆという）６は、車内ＬＡＮ８を介して、車両に搭載された各種機器との間でデータ通信を行う。そして、車内ＬＡＮ８には、車両の外部に設置されたリモートセンタ（不図示）との間で無線通信を行う無線通信機９が接続されている。
【００１７】
リモートセンタは、車両の所有者がカーディーラに車両を持ち込むことなく、フラッシュＲＯＭ３に記憶されているプログラムをアップデートすることを可能にするために設置されている。そしてリモートセンタは、プログラムのアップデートが必要になったときに、車両に搭載された無線通信機９との間で無線通信を行うことにより、新しいプログラムを構成するデータをＥＣＵ１に送信する。
【００１８】
ＣＰＵ２は、フラッシュＲＯＭ３に記憶されたプログラムに基づいて各種処理を実行する。またＣＰＵ２は、入出力回路５を介して入力される各種信号に基づいて制御演算を行い、その演算結果に基づき、点火装置やインジェクタ等の電気負荷へ入出力回路５を介して駆動信号を出力することにより、エンジンＥＧの制御に関係する電気負荷を制御する。例えばＣＰＵ２は、インジェクタの開弁タイミングおよび開弁時間を演算し、その演算結果に基づいて、インジェクタを駆動するための駆動信号を出力することにより、エンジンＥＧへの燃料噴射を制御する。
【００１９】
またＣＰＵ２は、プログラムを実行するための演算ユニットおよびレジスタなどからなるコア１１と、コア１１によるフラッシュＲＯＭ３へのアクセスを管理するメモリ管理ユニット（以下、ＭＭＵという）１２とを備え、所定の処理プログラムに基づいて処理を実行する。
【００２０】
コア１１は、ＥＣＵ１を搭載する車両を制御するための車両制御プログラム２１と、車両制御プログラム２１を書き換えるための書換制御プログラム２２と、車両制御プログラム２１と書換制御プログラム２２の動作を管理するための管理プログラム２３を実行するように構成されている。
【００２１】
ＭＭＵ１２は、コア１１がフラッシュＲＯＭ３へアクセスするために指定したアドレス（すなわち、論理アドレス）を、事前に設定されたアドレス変換表に基づいて、フラッシュＲＯＭ３の実メモリ空間におけるアドレス（すなわち、物理アドレス）に変換する機能を有するハードウェアである。例えば図２に示すように、コア１１が、車両制御プログラム２１における論理アドレス０×００００５００００にアクセスする処理を実行した場合に、フラッシュＲＯＭ３の実メモリ空間における物理アドレス０×００００５００００ではなく、論理アドレス０×００００５００００と異なる物理アドレス（図２では、０×４０００５００００）にアクセスすることになる。
【００２２】
このように構成されたＥＣＵ１において、コア１１は、書換制御処理と、切替準備処理と、切替処理を実行する。
まず、コア１１が実行する書換制御処理の手順を説明する。この書換制御処理は、書換制御プログラム２２に基づいて、コア１１の動作中に繰り返し実行される処理である。
【００２３】
書換制御処理が実行されると、コア１１は、図３に示すように、まずＳ１０にて、無線通信機９を介して取得したデータに基づいて、リモートセンタからリプログ要求を受信したか否かを判断する。ここで、リプログ要求を受信していないと判断した場合には（Ｓ１０：ＮＯ）、書換制御処理を一旦終了する。一方、リプログ要求を受信した場合には（Ｓ１０：ＹＥＳ）、Ｓ２０にて、無線通信機９を介してリモートセンタから送信される新たなプログラムをフラッシュＲＯＭ３に書き込む書換処理を行う。なお本実施形態では、フラッシュＲＯＭ３における物理アドレス０×２００００００００〜０×３００００００００の記憶領域が第１記憶領域３１に割り当てられ、物理アドレス０×４００００００００〜０×５００００００００の記憶領域が第２記憶領域３２に割り当てられている（図６を参照）。そして、Ｓ３０の書換処理においてＭＭＵ１２は、第１記憶領域３１に記憶されているプログラムにアクセスして車両制御プログラム２１の処理を実行している場合には、第２記憶領域３２にプログラムが書き込まれるようにアドレスを変換し、第２記憶領域３２に記憶されているプログラムにアクセスして車両制御プログラム２１の処理を実行している場合には、第１記憶領域３１にプログラムが書き込まれるようにアドレスを変換する。
【００２４】
そしてＳ３０にて、書換処理によるプログラムの書き換えが完了したか否かを判断する。ここで、書き換えが完了していない場合には（Ｓ３０：ＮＯ）、Ｓ２０に移行して、上述の処理を繰り返す。一方、書き換えが完了した場合には（Ｓ３０：ＹＥＳ）、Ｓ４０にて、切替完了フラグをクリアし、さらにＳ５０にて、切替準備要求フラグをセットする。
【００２５】
その後Ｓ６０にて、切替完了フラグがセットされているか否かを判断する。ここで、切替完了フラグがクリアされている場合には（Ｓ６０：ＮＯ）、Ｓ６０の処理を繰り返し、切替完了フラグがセットされるまで待機する。一方、切替完了フラグがセットされている場合には（Ｓ６０：ＹＥＳ）、書換制御処理を一旦終了する。
【００２６】
次に、コア１１が実行する切替準備処理の手順を説明する。この切替準備処理は、車両制御プログラム２１に基づいて、コア１１の動作中に繰り返し実行される処理である。
切替準備処理が実行されると、コア１１は、図４に示すように、まずＳ１１０にて、切替準備要求フラグがセットされているか否かを判断する。ここで、切替準備要求フラグがクリアされている場合には（Ｓ１１０：ＮＯ）、切替準備処理を一旦終了する。一方、切替準備要求フラグがセットされている場合には（Ｓ１１０：ＹＥＳ）、Ｓ１２０にて、切替準備要求フラグをクリアし、Ｓ１３０にて、切替準備が完了したか否かを判断する。具体的には、車両制御プログラム２１の中で今回の書換処理で内容が書き換えられる部分（以下、書換対象という）の処理が実行中である場合には、切替準備が完了していないと判断し、書換対象の処理が実行中でない場合には、切替準備が完了したと判断する。なお、上記の「書換対象の処理が実行中である」とは、フラッシュＲＯＭ３の記憶領域のうち、書換対象の処理を行うためのプログラムおよびデータが記憶されている領域にコア１１がアクセスしていない状態をいう。
【００２７】
ここで、切替準備が完了していない場合には（Ｓ１３０：ＮＯ）、Ｓ１３０の処理を繰り返し、切替準備が完了するまで待機する。一方、切替準備が完了した場合には（Ｓ１３０：ＹＥＳ）、Ｓ１４０にて、書換対象の処理を停止する。
【００２８】
その後Ｓ１５０にて、切替開始要求フラグをセットし、Ｓ１６０にて、切替完了フラグがセットされているか否かを判断する。ここで、切替完了フラグがクリアされている場合には（Ｓ１６０：ＮＯ）、Ｓ１６０の処理を繰り返し、切替完了フラグがセットされるまで待機する。一方、切替完了フラグがセットされている場合には（Ｓ１６０：ＹＥＳ）、Ｓ１７０にて、書換対象の処理を再開して、切替準備処理を一旦終了する。
【００２９】
次に、コア１１が実行する切替処理の手順を説明する。この切替処理は、管理プログラム２３に基づいて、コア１１の動作中に繰り返し実行される処理である。
切替処理が実行されると、コア１１は、図５に示すように、まずＳ２１０にて、切替開始要求フラグがセットされているか否かを判断する。ここで、切替開始要求フラグがクリアされている場合には（Ｓ２１０：ＮＯ）、切替処理を一旦終了する。一方、切替開始要求フラグがセットされている場合には（Ｓ２１０：ＹＥＳ）、Ｓ２２０にて、切替開始要求フラグをクリアし、Ｓ２３０にて、プログラム読込用のアドレス変換設定を変更する。具体的には、第２記憶領域３２に記憶されているプログラムにアクセスしてコア１１が処理を実行している場合には、第１記憶領域３１に記憶されているプログラムにコア１１がアクセスするように、ＭＭＵ１２のアドレス変換表を変更する（図６を参照）。一方、第１記憶領域３１に記憶されているプログラムにアクセスしてコア１１が処理を実行している場合には、第２記憶領域３２に記憶されているプログラムにコア１１がアクセスするように、ＭＭＵ１２のアドレス変換表を変更する。
【００３０】
さらにＳ２４０にて、プログラム書換用のアドレス変換設定を変更する。具体的には、第１記憶領域３１に記憶されているプログラムにアクセスしてコア１１が処理を実行する場合には、書換処理において第２記憶領域３２にプログラムが書き込まれるように、ＭＭＵ１２のアドレス変換表を変更する。一方、第２記憶領域３２に記憶されているプログラムにアクセスしてコア１１が処理を実行する場合には、書換処理において第１記憶領域３１にプログラムが書き込まれるように、ＭＭＵ１２のアドレス変換表を変更する。その後Ｓ２５０にて、切替完了フラグをセットし、切替処理を一旦終了する。
【００３１】
次に、プログラムの書き換えが完了してからプログラムの切り替えが完了するまでのコア１１の動作を説明する。
図７に示すように、書換制御処理による書換処理が完了すると（時刻ｔ１を参照）、書換制御処理は切替準備処理に対して切替準備要求を通知し、書換制御処理による動作を停止した状態となる（時刻ｔ２を参照）。そして切替準備処理が、切替準備要求を確認して、その後に切替準備が完了すると、切替処理に対して切替開始要求を通知し、書換対象の処理を停止する（時刻ｔ３を参照）。
【００３２】
そして切替処理が、切替開始要求を確認すると処理を開始し（時刻ｔ４を参照）、アドレス変換設定を変更し（時刻ｔ５を参照）、その後に切替完了を通知する（時刻ｔ６を参照）。そして、書換制御処理が切替完了を確認するとその動作を再開するとともに、切替準備処理が切替完了を確認すると書換対象の処理を再開させ（時刻ｔ１６を参照）、その後に切替処理は処理を終了する（時刻ｔ７を参照）。
【００３３】
このように構成されたＥＣＵ１は、エンジンＥＧを制御するための車両制御プログラム２１を記憶する記憶領域が設けられ、記憶内容の書き換えが可能なフラッシュＲＯＭ３と、フラッシュＲＯＭ３に記憶された車両制御プログラム２１に従って処理を行うように構成されたコア１１とを備え、リモートセンタからリプログ要求を受信した場合には、フラッシュＲＯＭ３に記憶された車両制御プログラム２１の内容を書き換える書換処理を行うように構成された電子制御装置であって、フラッシュＲＯＭ３の記憶領域は、互いに領域が重複しないように予め設定された第１記憶領域３１および第２記憶領域３２に分割され、ＭＭＵ１２は、書換処理によって車両制御プログラム２１の内容を書き換える記憶領域として、第１記憶領域３１および第２記憶領域３２のうちの何れか１つを選択して切り替えることができるとともに、コア１１が車両制御プログラム２１を読み込むフラッシュＲＯＭ３の記憶領域として、第１記憶領域３１および第２記憶領域３２のうちの何れか１つを選択して切り替えることができる。そしてＭＭＵ１２は、書換処理によって車両制御プログラム２１の内容を書き換える記憶領域として、第１記憶領域３１および第２記憶領域３２のうち、コア１１が車両制御プログラム２１を読み込むのとは異なる記憶領域を選択して切り替える（Ｓ２４０）。
【００３４】
これにより、車両制御プログラム２１に従って処理を行うためにコア１１が車両制御プログラム２１を読み込む記憶領域から読み込まれた車両制御プログラム２１に従った処理をコア１１が実行している最中に書換処理が行われても、コア１１が車両制御プログラム２１を読み込む記憶領域に記憶されている車両制御プログラム２１が書き換えられることがない。このため、車両制御プログラム２１の実行中であっても車両制御プログラム２１を書き換えることができる。
【００３５】
さらに、書換処理による車両制御プログラム２１の書き換えが完了した後に、書換処理の動作を停止させる（Ｓ６０）とともに、書換処理による車両制御プログラム２１の書き換えが完了した後に、切替準備が完了したか否かを判断し（Ｓ１３０）、切替準備が完了した場合に（Ｓ１３０：ＹＥＳ）、書換対象の処理の動作を停止させる（Ｓ１４０）。そしてＭＭＵ１２は、書換処理の動作が停止し、且つ、書換対象の処理の動作が停止した後に、コア１１が車両制御プログラム２１を読み込むフラッシュＲＯＭ３の記憶領域として、書換処理により車両制御プログラム２１が書き換えられた記憶領域を選択して切り替える（Ｓ２３０）。
【００３６】
このように構成されたＥＣＵ１では、書換処理による車両制御プログラム２１の書き換えが完了した後に、書換処理により書き換えられた車両制御プログラム２１の内容、すなわち上記の書換対象の内容に応じて、書換対象の処理を停止させるのに適切なタイミングで、書換対象の処理を停止させた後に、フラッシュＲＯＭ３の記憶領域から読み込む車両制御プログラム２１を切り替えることができる。このため、車両制御プログラム２１の実行中に読み込む車両制御プログラム２１を切り替えることにより、データの不整合が発生するということがなくなり、車両制御プログラム２１の実行中であっても、書き換えられた車両制御プログラム２１に切り替えることができる。
【００３７】
また切替準備処理では、書換処理の動作が停止した後であって（Ｓ１１０：ＹＥＳ）、且つ、切替準備が完了した場合に（Ｓ１３０：ＹＥＳ）、書換対象の処理の動作を停止させる（Ｓ１４０）。これにより、切替準備が完了した直後に、書換処理と書換対象の処理の両方を動作停止させることができ、書換処理の動作が停止から切替処理が開始されるまでに要する時間を必要最低限に抑えることができる。
【００３８】
以上説明した実施形態において、フラッシュＲＯＭ３は本発明における不揮発性メモリ、コア１１は本発明における演算部、Ｓ１０の処理の判断条件は本発明における書換条件、第１記憶領域３１および第２記憶領域３２は本発明における分割記憶領域、ＭＭＵ１２およびＳ２４０の処理は本発明における書換切替手段、ＭＭＵ１２およびＳ２３０の処理は本発明における読込切替手段、Ｓ６０の処理は本発明における第１停止手段、Ｓ１３０の処理の判断条件は本発明における停止判定条件、Ｓ１４０の処理は本発明における第２停止手段である。
【００３９】
（第２実施形態）
以下に本発明の第２実施形態を図面とともに説明する。なお第２実施形態では、第１実施形態と異なる部分のみを説明する。
【００４０】
第２実施形態のＥＣＵ１は、書換制御処理が変更された点以外は第１実施形態と同じである。
書換制御処理が実行されると、コア１１は、図８に示すように、まずＳ４１０にて、無線通信機９を介して取得したデータに基づいて、リモートセンタからリプログ要求を受信したか否かを判断する。ここで、リプログ要求を受信していないと判断した場合には（Ｓ４１０：ＮＯ）、書換制御処理を一旦終了する。一方、リプログ要求を受信した場合には（Ｓ４１０：ＹＥＳ）、Ｓ４２０にて、Ｓ２０と同様にして、無線通信機９を介してリモートセンタから送信される新たなプログラムをフラッシュＲＯＭ３に書き込む書換処理を行う。
【００４１】
そしてＳ４３０にて、書換処理によるプログラムの書き換えが完了したか否かを判断する。ここで、書き換えが完了していない場合には（Ｓ４３０：ＮＯ）、Ｓ４２０に移行して、上述の処理を繰り返す。一方、書き換えが完了した場合には（Ｓ４３０：ＹＥＳ）、Ｓ４４０にて、切替完了フラグをクリアし、さらにＳ４５０にて、切替準備要求フラグをセットする。
【００４２】
その後Ｓ４６０にて、切替準備完了フラグがセットされているか否かを判断する。ここで、切替準備完了フラグがクリアされている場合には（Ｓ４６０：ＮＯ）、Ｓ４６０の処理を繰り返し、切替準備完了フラグがセットされるまで待機する。一方、切替準備完了フラグがセットされている場合には（Ｓ４６０：ＹＥＳ）、Ｓ４７０にて、切替準備完了フラグをクリアし、さらにＳ４８０にて、切替開始要求フラグをセットする。
【００４３】
その後Ｓ４９０にて、切替完了フラグがセットされているか否かを判断する。ここで、切替完了フラグがクリアされている場合には（Ｓ４９０：ＮＯ）、Ｓ４９０の処理を繰り返し、切替完了フラグがセットされるまで待機する。一方、切替完了フラグがセットされている場合には（Ｓ４９０：ＹＥＳ）、書換制御処理を一旦終了する。
【００４４】
次に、プログラムの書き換えが完了してからプログラムの切り替えが完了するまでのコア１１の動作を説明する。
図９に示すように、書換制御処理による書換処理が完了すると（時刻ｔ１１を参照）、書換制御処理は切替準備処理に対して切替準備要求を通知する（時刻ｔ１２を参照）。そして切替準備処理が、切替準備要求を確認して、その後に切替準備が完了すると、書換制御処理に対して切替準備完了を通知し、書換対象の処理を停止する（時刻ｔ１３を参照）。さらに書換制御処理が、切替準備完了を確認すると、切替処理に対して切替開始要求を通知し、書換制御処理による動作を停止した状態となる（時刻ｔ１４を参照）。
【００４５】
そして切替処理が、切替開始要求を確認すると処理を開始し（時刻ｔ１５を参照）、アドレス変換設定を変更し（時刻ｔ１６を参照）、その後に切替完了を通知する（時刻ｔ１７を参照）。そして、書換制御処理が切替完了を確認するとその動作を再開するとともに、切替準備処理が切替完了を確認すると書換対象の処理を再開させ（時刻ｔ１７を参照）、その後に切替処理は処理を終了する（時刻ｔ１８を参照）。
【００４６】
このように構成されたＥＣＵ１において、書換制御処理では、書換処理による車両制御プログラム２１の書き換えが完了した後であって（Ｓ４３０：ＹＥＳ）、書換対象の処理の動作が停止した後に（Ｓ４６０：ＹＥＳ）、書換処理の動作を停止させる（Ｓ４９０）。これにより、書換処理と書換対象の処理の両方が動作停止するのは、書換制御処理により書換処理の動作を停止させた直後となる。すなわち、切替準備処理側ではなく書換制御処理側で切替処理を開始させるか否かが決定される。このため、切替準備処理側で異常が発生することにより、書換処理と書換対象の処理の両方が動作停止していない状態で切替処理が開始されてしまうという事態の発生を抑制することができる。
【００４７】
以上説明した実施形態において、Ｓ４９０の処理は本発明における第１停止手段である。
（第３実施形態）
以下に本発明の第３実施形態を図面とともに説明する。なお第３実施形態では、第１実施形態と異なる部分のみを説明する。
【００４８】
第３実施形態のＥＣＵ１は、ＣＰＵ２の構成と、書換制御処理と、切替準備処理と、切替処理が変更された点以外は第１実施形態と同じである。
まずＣＰＵ２は、図１０に示すように、コア１１の構成が変更された点以外は第１実施形態と同じである。そしてコア１１は、コア１１のリソースをクロック単位で時分割して使用することで仮想的に複数のコアが存在しているように動作させるＣＰＵ仮想化技術を利用して、仮想コア４１，４２を並列動作させる。さらにコア１１は、各仮想コアの動作状態を管理する機能４３（以下、ハイパーバイザ４３という）を搭載している。
【００４９】
そして仮想コア４１は、車両制御プログラム２１を実行するように構成されている。また仮想コア４２は、書換制御プログラム２２を実行するように構成されている。また、ハイパーバイザ４３が動作しているときには、仮想コア４１，４２はその動作を停止する。
【００５０】
まず、仮想コア４２が実行する書換制御処理の手順を説明する。この書換制御処理は、仮想コア４２の動作中に繰り返し実行される処理である。
書換制御処理が実行されると、仮想コア４２は、図１１に示すように、まずＳ５１０にて、無線通信機９を介して取得したデータに基づいて、リモートセンタからリプログ要求を受信したか否かを判断する。ここで、リプログ要求を受信していないと判断した場合には（Ｓ５１０：ＮＯ）、書換制御処理を一旦終了する。一方、リプログ要求を受信した場合には（Ｓ５１０：ＹＥＳ）、Ｓ５２０にて、切替完了フラグがセットされているか否かを判断する。
【００５１】
ここで、切替完了フラグがクリアされている場合には（Ｓ５２０：ＮＯ）、Ｓ５２０の処理を繰り返し、切替完了フラグがセットされるまで待機する。一方、切替完了フラグがセットされている場合には（Ｓ５２０：ＹＥＳ）、Ｓ５３０にて、Ｓ２０と同様にして、無線通信機９を介してリモートセンタから送信される新たなプログラムをフラッシュＲＯＭ３に書き込む書換処理を行う。
【００５２】
そしてＳ５４０にて、書換処理によるプログラムの書き換えが完了したか否かを判断する。ここで、書き換えが完了していない場合には（Ｓ５４０：ＮＯ）、Ｓ５３０に移行して、上述の処理を繰り返す。一方、書き換えが完了した場合には（Ｓ５４０：ＹＥＳ）、Ｓ５５０にて、切替完了フラグをクリアし、さらにＳ５６０にて、切替準備要求フラグをセットして、書換制御処理を一旦終了する。
【００５３】
次に、仮想コア４１が実行する切替準備処理の手順を説明する。この切替準備処理は、仮想コア４１の動作中に繰り返し実行される処理である。
切替準備処理が実行されると、仮想コア４１は、図１２に示すように、まずＳ６１０にて、切替準備要求フラグがセットされているか否かを判断する。
【００５４】
ここで、切替準備要求フラグがクリアされている場合には（Ｓ６１０：ＮＯ）、切替準備処理を一旦終了する。一方、切替準備要求フラグがセットされている場合には（Ｓ６１０：ＹＥＳ）、Ｓ６２０にて、切替準備要求フラグをクリアし、Ｓ６３０にて、Ｓ１３０と同様にして、切替準備が完了したか否かを判断する。
【００５５】
ここで、切替準備が完了していない場合には（Ｓ６３０：ＮＯ）、Ｓ６３０の処理を繰り返し、切替準備が完了するまで待機する。一方、切替準備が完了した場合には（Ｓ６３０：ＹＥＳ）、Ｓ６４０にて、ハイパーバイザ４３を呼び出し、切替準備処理を一旦終了する。これにより、ハイパーバイザ４３が動作を開始し、仮想コア４１と仮想コア４２はその動作を停止する。
【００５６】
次に、ハイパーバイザ４３が実行する切替処理の手順を説明する。この切替処理は、仮想コア４１の切替準備処理においてハイパーバイザ４３を呼び出すことによりハイパーバイザ４３が動作を開始した直後に実行される処理である。
【００５７】
切替処理が実行されると、ハイパーバイザ４３は、図１３に示すように、まずＳ７１０にて、Ｓ２３０と同様にして、プログラム読込用のアドレス変換設定を変更する。さらにＳ７２０にて、Ｓ２４０と同様にして、プログラム書換用のアドレス変換設定を変更する。その後Ｓ７３０にて、切替完了フラグをセットする。そしてＳ７４０にて、ハイパーバイザ４３の動作を終了させて、切替処理を終了する。これにより、仮想コア４１と仮想コア４２はその動作を再開する。
【００５８】
次に、プログラムの書き換えが完了してからプログラムの切り替えが完了するまでの仮想コア４１，４２とハイパーバイザ４３の動作を説明する。
図１４に示すように、仮想コア４２による書換処理が完了すると（時刻ｔ２１を参照）、仮想コア４２は仮想コア４１に対して切替準備要求を通知する（時刻ｔ２２を参照）。そして仮想コア４１が、切替準備要求を確認して、その後に切替準備が完了するとハイパーバイザ４３を呼び出す（時刻ｔ２３を参照）。
【００５９】
これにより、ハイパーバイザ４３が動作を開始するとともに、仮想コア４１と仮想コア４２はその動作を停止する（時刻ｔ２４を参照）。そして、ハイパーバイザ４３は、アドレス変換設定を変更し（時刻ｔ２５を参照）、その後、ハイパーバイザ４３の動作を終了させる（時刻ｔ２６を参照）。これにより、仮想コア４１，４２はその動作を再開する。
【００６０】
このように構成されたＥＣＵ１は、エンジンＥＧを制御するための車両制御プログラム２１を記憶する記憶領域が設けられ、記憶内容の書き換えが可能なフラッシュＲＯＭ３と、フラッシュＲＯＭ３に記憶された車両制御プログラム２１に従って処理を行うように構成されたコア１１とを備え、リモートセンタからリプログ要求を受信した場合には、フラッシュＲＯＭ３に記憶された車両制御プログラム２１の内容を書き換える書換処理を行うように構成された電子制御装置であって、フラッシュＲＯＭ３の記憶領域は、互いに領域が重複しないように予め設定された第１記憶領域３１および第２記憶領域３２に分割され、ＭＭＵ１２は、書換処理によって車両制御プログラム２１の内容を書き換える記憶領域として、第１記憶領域３１および第２記憶領域３２のうちの何れか１つを選択して切り替えることができるとともに、コア１１が車両制御プログラム２１を読み込むフラッシュＲＯＭ３の記憶領域として、第１記憶領域３１および第２記憶領域３２のうちの何れか１つを選択して切り替えることができる。そしてＭＭＵ１２は、書換処理によって車両制御プログラム２１の内容を書き換える記憶領域として、第１記憶領域３１および第２記憶領域３２のうち、コア１１が車両制御プログラム２１を読み込むのとは異なる記憶領域を選択して切り替える（Ｓ７２０）。
【００６１】
これにより、車両制御プログラム２１に従って処理を行うためにコア１１が車両制御プログラム２１を読み込む記憶領域から読み込まれた車両制御プログラム２１に従った処理をコア１１が実行している最中に書換処理が行われても、コア１１が車両制御プログラム２１を読み込む記憶領域に記憶されている車両制御プログラム２１が書き換えられることがない。このため、車両制御プログラム２１の実行中であっても車両制御プログラム２１を書き換えることができる。
【００６２】
さらに、書換処理による車両制御プログラム２１の書き換えが完了した後に、書換処理の動作を停止させる（Ｓ６４０）とともに、書換処理による車両制御プログラム２１の書き換えが完了した後に、切替準備が完了したか否かを判断し（Ｓ６３０）、切替準備が完了した場合に（Ｓ６３０：ＹＥＳ）、書換対象の処理の動作を停止させる（Ｓ６４０）。そしてＭＭＵ１２は、書換処理の動作が停止し、且つ、書換対象の処理の動作が停止した後に、コア１１が車両制御プログラム２１を読み込むフラッシュＲＯＭ３の記憶領域として、書換処理により車両制御プログラム２１が書き換えられた記憶領域を選択して切り替える（Ｓ７１０）。
【００６３】
したがって、第３実施形態のＥＣＵ１は、第１実施形態のＥＣＵ１と同様の効果を奏する。
さらに、コア１１は、単一のコアのリソースを時分割して使用することで仮想的に２つの仮想コア４１，４２が存在しているように動作し、仮想コア４２は書換処理を実行し、仮想コア４１は車両制御プログラム２１を実行するように構成され、書換処理を実行する仮想コア４２の動作を停止させることにより、書換処理の動作を停止させ（Ｓ６４０）、仮想コア４１の動作を停止させることにより、書換対象の処理を停止させる（Ｓ６４０）。
【００６４】
ＣＰＵ仮想化技術を利用して複数の仮想コアを並列動作させる場合には、ハイパーバイザを呼び出してハイパーバイザモードに移行することで、全ての仮想コアを停止させることが可能である。そして、ハイパーバイザモードへの移行はハードウェアにより実行されるものであり１命令を実行するだけでよい。このため、書換処理と書換対象の処理を停止させるのに要する時間または処理を、第１，２実施形態のようにソフトウェアにより停止させる場合と比較して、非常に少なくすることができる。
【００６５】
以上説明した実施形態において、Ｓ５１０の処理の判断条件は本発明における書換条件、ＭＭＵ１２およびＳ７２０の処理は本発明における書換切替手段、ＭＭＵ１２およびＳ７１０の処理は本発明における読込切替手段、Ｓ６４０の処理は本発明における第１停止手段および第２停止手段、Ｓ６３０の処理の判断条件は本発明における停止判定条件である。
【００６６】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
例えば上記実施形態では、互いに領域が重複しないように予め設定された２つの記憶領域（第１記憶領域３１と第２記憶領域３２）がフラッシュＲＯＭ３内に設けられているものを示したが、互いに領域が重複しない３つ以上の記憶領域をフラッシュＲＯＭ３内に設けるようにしてもよい。
【００６７】
また上記実施形態では、１つのフラッシュＲＯＭ３内に第１記憶領域３１と第２記憶領域３２が設けられているものを示したが、第１記憶領域３１と第２記憶領域３２をそれぞれ異なるフラッシュＲＯＭ内に設けるようにしてもよい。
【００６８】
また上記第１実施形態では、書換対象の処理が実行中でない場合に切替準備が完了したと判断して（Ｓ１３０：ＹＥＳ）、書換対象の処理を停止する（Ｓ１４０）ものを示した。しかし、書換対象が突然書き換えられても問題がない場合（例えば、ユーザインタフェース（ＵＩ）の表示データ等を書き換える場合）には、書換対象の処理が実行中であるか否かを判断する処理（Ｓ１３０）と、書換対象の処理を停止する処理（Ｓ１４０）を省略して、書換処理による車両制御プログラム２１の書き換えが完了した直後に、切替処理が開始されるようにしてもよい。
【００６９】
また上記第３実施形態では、書換対象の処理が実行中でない場合に切替準備が完了したと判断して（Ｓ６３０：ＹＥＳ）、ハイパーバイザ４３を呼び出し（Ｓ６４０）、書換対象の処理を停止するものを示した。しかし、書換対象が突然書き換えられても問題がない場合には、書換対象の処理が実行中であるか否かを判断する処理（Ｓ６３０）を省略して、書換処理による車両制御プログラム２１の書き換えが完了した直後にハイパーバイザ４３を呼び出すようにしてもよい。
【符号の説明】
【００７０】
１…ＥＣＵ、３…フラッシュＲＯＭ、１１…コア、１２…ＭＭＵ、２１…車両制御プログラム、２２…書換制御プログラム、２３…管理プログラム、３１…第１記憶領域、３２…第２記憶領域、４１，４２…仮想コア、４３…ハイパーバイザ
【図１】
0005900168.tif 000002
【図２】
0005900168.tif 000003
【図３】
0005900168.tif 000004
【図４】
0005900168.tif 000005
【図５】
0005900168.tif 000006
【図６】
0005900168.tif 000007
【図７】
0005900168.tif 000008
【図８】
0005900168.tif 000009
【図９】
0005900168.tif 000010
【図１０】
0005900168.tif 000011
【図１１】
0005900168.tif 000012
【図１２】
0005900168.tif 000013
【図１３】
0005900168.tif 000014
【図１４】
0005900168.tif 000015