(57)【特許請求の範囲】
【請求項１】
各演算に付された優先順位に従って複数の演算を順次実行する電子制御装置（１）であって、
前記各演算による演算結果を記録部（３０）に記録する記録手段（１０、Ｓ２２０、Ｓ２５０）と、
実行中の演算よりも優先順位が高い演算についての割込要求が入力されると、前記実行中の演算である割込前演算を中断させ、前記割込要求に対応する演算の実行が終了した後に前記割込前演算が再開されるように演算順序を変更する順序変更手段（５０）と、
前記各演算の演算結果において、予め定められたエラーが発生したか否かを判断する判断手段（１０、Ｓ１３０、Ｓ２３０）と、
前記判断手段によってエラーが発生したと判断された場合、前記エラーが発生したときに中断されていた全ての割込前演算が終了した後に、前記記録部（３０）における少なくとも前記エラーとなった演算結果が記録される領域に、予め定められた初期化値を代入する初期化を行う初期化手段（１０、Ｓ１５０、Ｓ２４０）と、
を備えることを特徴とする電子制御装置。
【請求項２】
請求項１に記載の電子制御装置であって、
前記判断手段は、前記演算結果が非数を表す場合に、前記演算における予め定められたエラーが発生したと判断する
ことを特徴とする電子制御装置。
【請求項３】
請求項１または請求項２に記載の電子制御装置であって、
前記判断手段は、前記演算結果が無限大を表す場合に、前記演算における予め定められたエラーが発生したと判断する
ことを特徴とする電子制御装置。
【請求項４】
請求項１から請求項３のいずれか一項に記載の電子制御装置であって、
前記判断手段は、予め定められた無効な演算が行われた場合に、前記演算における予め定められたエラーが発生したと判断する
ことを特徴とする電子制御装置。
【請求項５】
請求項１から請求項４のいずれか一項に記載の電子制御装置であって、
前記初期化手段は、前記割込要求に対応する演算の１つであり、優先順位が最下位に定められている
ことを特徴とする電子制御装置。
【請求項６】
請求項１から請求項５のうちいずれか一項に記載の電子制御装置であって、
前記記録手段は、前記記録部のうちの第１の記録部に、前記各演算による演算結果を記録し、
前記判断手段は、前記第１の記録部に記録された前記各演算による演算結果に基づいて、前記エラーが発生したか否かを判断し、
前記初期化手段は、前記判断手段により前記エラーが発生していないと判断された場合に、前記記録部のうちの前記第１の記録部とは異なる第２の記録部に前記演算結果を記録し、前記判断手段により前記エラーが発生したと判断された場合に、前記第２の記録部に前記初期化値を記録する
ことを特徴とする電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算を実行する電子制御装置に関する。
【背景技術】
【０００２】
一般に、電子制御装置（ＥＣＵ：Electronic Control Unit）は、ＣＰＵやメモリの他、Ａ／Ｄコンバータ、タイマ、ＰＷＭ波形発生回路などの周辺（ペリフェラル）回路を備えたマイクロコンピュータにより、制御対象を制御するための各種の演算を行う。最近では、マイクロコンピュータは、浮動小数点演算プロセッサ（ＦＰＵ：Floating-Point Unit）を備えることが一般的になっている。ＦＰＵを備えることによって、浮動小数点型データによる演算が可能となり、固定小数点型データに比べて細かい精度で演算結果を得られるからである。このような浮動小数点型データでは、数値として表現できない演算結果を非数として表現するようになっている。浮動小数点型データによる演算では、非数が発生すると、この非数を用いた演算結果は全て非数となってしまう。このため、非数が発生した場合には、非数を正常値に書き換える必要がある。
【０００３】
特許文献１では、非数が発生したことが検出されたときにＲＡＭにおける非数が発生した領域を初期化する技術が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１６４８１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、前述のようなマイクロコンピュータが備えるＣＰＵは、多くの場合、割り込みに対応可能である。割り込みには、ペリフェラルからの要求に基づくハードウェア割り込みと、ＣＰＵ自身の命令実行に基づくソフトウェア割り込みとがある。ＣＰＵは、いずれの割り込みにおいても、割り込みが生じると、現在実行中の処理を中断し、その処理を再開するのに必要な処理情報を、ＲＡＭ等の外部の記憶媒体に退避（スタック）させる。処理情報とは、具体的にはプログラムカウンタの内容やフラグ等の処理状態を表す情報である。ＣＰＵは、割込処理を実行し、この割込処理が完了した後、退避しておいた処理情報を外部の記憶媒体から読み出し、その情報に基づき、先に中断した処理を再開する。
【０００６】
しかしながら、割込処理における演算において非数が発生した場合、特許文献１に記載のようにＲＡＭにおける非数が発生した領域を初期化したとしても、割り込み終了後に再開された処理において、初期化された領域を書き換えるような演算が実行されることが有り得る。例えば、割込終了後に、処理情報として退避させておいた情報に基づいて、初期化された領域を上書きする演算が実行されるような場合、等である。ここで一例として、該領域の記録内容を用いて制御対象への制御が行われるような場合について考える。この制御は、仮に該領域に非数が発生したときには、該領域の値が所定の初期化値であることを前提にして行われるものとする。このような場合、該領域が初期化されるべき値である初期化値とは異なる想定外の値に書き換えられていると、制御対象への制御に想定外の影響を及ぼすおそれがある。このため、割込処理における演算結果において非数のような、演算における予め定められたエラーが発生した場合には、演算結果を予め定められた初期化値に確実に初期化することが望ましい。
【０００７】
本発明は、演算結果においてエラーが発生した場合に、より確実に、予め定められた初期化値に演算結果を初期化する技術を提供することを目的としている。
【課題を解決するための手段】
【０００８】
本発明の一側面は、前述のようなマイクロコンピュータであって、各演算に付された優先順位に従って複数の演算を順次実行する。マイクロコンピュータは、順序変更手段と、判断手段と、初期化手段とを備える。順序変更手段は、実行中の演算よりも優先順位が高い演算についての割込要求が入力されると、実行中の演算である割込前演算を中断させ、割込要求に対応する演算の実行が終了した後に割込前演算が再開されるように演算順序を変更する。判断手段は、各演算の演算結果において、予め定められたエラーが発生したか否かを判断する。初期化手段は、判断手段によってエラーが発生したと判断された場合、エラーが発生したときに中断されていた全ての割込前演算が終了した後に、記録部における少なくともエラーとなった演算結果が記録される領域に、予め定められた初期化値を代入する初期化を行う。
【０００９】
このような構成では、演算において予め定められたエラーが発生した場合、中断されていた全ての割込前演算が終了した後に、少なくともエラーとなった演算結果の記録される領域の値が所定の初期化値に初期化される。これによれば、割込要求により中断された割込前演算は全て終了しているため、初期化された領域がこのような割込前演算の再開によって初期化されるべき値である初期化値とは異なる値に書き換えられることが抑制される。このため、エラーとなった演算結果が記録されている領域を、確実に、予め定められた初期化値に初期化することができる。
【００１０】
なお、特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１１】
【図１】電子制御装置の構成の一例を示すブロック図。
【図２】優先順位テーブルの一例を示す図。
【図３】ＲＡＭの記憶領域の一例を説明する図。
【図４】（ａ）は浮動小数点型データのデータ形式の一例を示す図であり、（ｂ）は浮動小数点型データの数値の意味を表す図。
【図５】第１タスク処理の一例を示すフローチャート。
【図６】第２タスク処理の一例を示すフローチャート。
【図７】初期化処理の一例を示すフローチャート。
【図８】初期化領域特定テーブルの一例を示す図。
【図９】本実施形態の作動の一例を示す図。
【図１０】仮に第２タスク処理に代えて比較例処理を実行した場合の作動の一例を示す図。
【図１１】他の実施形態における第２タスク処理の一例を示すフローチャート。
【図１２】他の実施形態における多重割込時の作動の一例を示す図。
【発明を実施するための形態】
【００１２】
以下、本発明が適用された実施形態について、図面を用いて説明する。
［１．構成］
図１は、本発明が適用された電子制御装置１の構成を示す図である。電子制御装置１は、ＣＰＵ１０と、ＲＯＭ２０と、ＲＡＭ３０と、ＦＰＵ４０と、割込コントローラ５０と、周辺回路６０とからなるマイクロコンピュータ２を備える。
【００１３】
ＣＰＵ１０は、予め定められた演算順序に従って予め定められたプログラムを実行する周知のものであり、割り込みに対応可能である。ＣＰＵ１０については後述する。
ＲＯＭ２０には、ＣＰＵ１０によって実行されるプログラム（処理）が記録されている。また、ＲＯＭ２０には、ＣＰＵ１０が実行するこれらのプログラムの優先順位を定めた優先順位テーブルが記録されている。一例として図２に示す優先順位テーブルは、初期化処理、第１タスク処理〜第３タスク処理を実行するプログラムの優先順位を表す。ここでは、初期化処理を実行するプログラムの優先順位が最下位に設定され、第１タスク処理、第２タスク処理、第３タスク処理の順に優先順位が高くなるように設定される。
【００１４】
ＲＡＭ３０には、ＣＰＵ１０による演算結果等が記録される。ＲＡＭ３０は、一例として図３に示すように、予め定められた変数の演算結果を記録するデータ記録領域３０１と、スタック領域３０２とを備える。データ記録領域３０１には、浮動小数点型データの格納領域が確保される。ここでは、一例として、変数ＲａｍＡ、変数ＲａｍＢが浮動小数点型データとして記録される。
【００１５】
ＦＰＵ４０は、プログラムに基づく演算のうち、浮動小数点演算を実行する。浮動小数点演算は浮動小数点型データを用いた演算であり、演算結果の浮動小数点型データは、前述のＲＡＭ３０のデータ記録領域３０１（浮動小数点型データの格納領域）に記録される。ＦＰＵ４０は、例えば、ＩＥＥＥ７５４規格に従ったデータ形式で、浮動小数点型データを表す。
【００１６】
つまり、ＩＥＥＥ７５４規格に従う単精度の浮動小数点型データは、図４（ａ）に示すように、１ビットの符号部、８ビットの指数部、２３ビットの仮数部で構成される。この規格の浮動小数点データでは、例えば、数値として表現できない演算結果を、「非数」として表現できるようになっている。０で除する演算や、∞（無限大）を用いた演算等の演算結果が、数値として表現できない演算結果の一例として挙げられる。例えばこの規格では、図４（ｂ）に示すように、指数部の８ビットが全て「１」で、すなわち指数部が１０進表記の「２５５」で、仮数部が「０」以外の場合、この浮動小数点型データは「非数」を表す。また、前述の規格では、指数部の８ビットが全て「１」で仮数部が「０」の場合、この浮動小数点型データは「無限大」を表す。なお、以下では、０で除する演算や、無限大を用いた演算のような、数値として表現できない演算結果となる演算を、無効な演算という。
【００１７】
ＣＰＵ１０は、プログラムに基づく演算のうち、固定小数点演算を実行し、浮動小数点演算をＦＰＵ４０に実行させる。ＣＰＵ１０は前述のように割込に対応可能である。なお、割込には、周辺回路６０（割込コントローラ５０）からの要求に基づくハードウェア割込と、ＣＰＵ１０自身の命令実行に基づくソフトウェア割込とがある。本実施形態では、ＣＰＵ１０がハードウェア割込に対応する場合について説明する。もちろん、ＣＰＵ１０は、ソフトウェア割込に対応するものであってもよいし、これらの両方に対応するものであってもよい。
【００１８】
ＣＰＵ１０は、プログラムに基づいて、少なくとも、フラグ処理、割込時ＣＰＵ処理、優先順位出力処理、第１タスク処理〜第３タスク処理、初期化処理を実行する。第１タスク処理〜第３タスク処理、初期化処理については後述する。
【００１９】
フラグ処理は、ＦＰＵ４０による浮動小数点演算の演算結果において予め定められたエラーが発生した場合に、エラーフラグをセットする処理である。フラグ処理では、ＣＰＵ１０は、ＦＰＵ４０による演算結果が非数を表す場合（演算結果が非数となった場合、ＦＰＵ４０にて無効な演算が行われた場合を含む）、及びＦＰＵ４０による演算結果が±∞を表す場合に、エラーフラグをセットする。なお、ＣＰＵ１０は、エラーフラグがセットされたときのＰＣの内容をエラープログラム特定情報としてＲＡＭ３０に記録するようになっている。エラーフラグは、プログラムごとにプログラム開始時にリセットされる。
【００２０】
割込時ＣＰＵ処理は、割り込みが発生したときにＣＰＵ１０が実行する処理である。一例を簡単に説明する。割込時ＣＰＵ処理では、割り込みが発生すると、具体的にはＣＰＵ割込要求信号が入力されると、ＣＰＵ１０は、現在実行中の処理を中断し、その処理を再開するのに必要な処理情報を、ＲＡＭ３０のスタック領域３０２に退避（スタック）させる。本実施形態では、ＣＰＵ割込要求信号は割込コントローラ５０から出力される。処理情報は、ＰＣの内容やフラグ等の処理状態を表す情報である。なお、本実施形態では、中断されたプログラム中で用いられていた所謂ローカル変数の内容を表す情報も処理情報に含むものとする。ＣＰＵ１０は、ＣＰＵ割込要求信号が入力されたときに取得した割込情報に基づいて、実行すべき割込処理を特定する。本実施形態では、割込情報は割込コントローラ５０から出力される。ＣＰＵ１０は、特定した割込処理を実行し、この割込処理が完了した後、退避しておいた情報をＲＡＭ３０のスタック領域３０２から読み出し、その情報に基づき、先に中断した処理を再開する。なお、以下では、処理情報をスタック領域３０２に退避させる処理を退避処理といい、退避しておいた情報をスタック領域３０２から読み出す処理を復帰処理という。
【００２１】
優先順位出力処理は、ＣＰＵ１０にて現在実行中のプログラムの優先順位を、割込コントローラ５０へ出力する処理である。具体的には、ＣＰＵ１０は、現在実行中のプログラムに対応する優先順位をＲＯＭ２０に記録された優先順位テーブルに基づいて特定し、特定した優先順位を割込コントローラ５０へ出力する。
【００２２】
割込コントローラ５０は、ＣＰＵ１０において実行中のプログラムよりも優先順位が高いプログラムについての割込要求が入力されると、割込要求が入力されたときに実行されていたプログラム（割込前プログラムという）をＣＰＵ１０に中断させる。そして、割込コントローラ５０は、割込要求に対応するプログラムによる割込処理の実行が終了した後に割込前プログラムが再開されるように、ＣＰＵ１０におけるプログラムの実行順序（演算順序）を変更する。
【００２３】
具体的には、割込要求は、周辺回路６０にて発生し、該周辺回路６０から割込コントローラ５０へ入力される。ＣＰＵ１０において実行中のプログラムの優先順位は、ＣＰＵ１０から割込コントローラ５０へ入力される。割込コントローラ５０は、ＲＯＭ２０に記録されている優先順位テーブルと同様の優先順位テーブルに基づき、割込要求に対応するプログラムとＣＰＵ１０にて実行中のプログラムとの優先順位を比較する。割込コントローラ５０は、ＣＰＵ１０にて実行中の割込前プログラムを中断させる場合は、ＣＰＵ割込要求をＣＰＵ１０へ出力する。このとき、割込コントローラ５０は、割込要求に対応するプログラムを特定可能な割込情報をＣＰＵ１０へ出力する。
【００２４】
周辺回路６０は、図示しないＩ／Ｏや各種レジスタ、Ａ／Ｄコンバータ、タイマ、ＰＷＭ波形発生回路などを備える。周辺回路６０の構成要素は、所定の割込処理を行わせるための割込要求を、割込コントローラ５０へ出力する。
【００２５】
［２．処理］
次に、ＣＰＵ１０が、プログラムに基づいて実行する第１タスク処理〜第３タスク処理、及び初期化処理について説明する。第１タスク処理〜第３タスク処理は、いずれも浮動小数点演算を行う処理である。
【００２６】
［２−１．第１タスク処理］
第１タスク処理は、電子制御装置１に電源が供給されている間、予め定められた周期で、繰り返し実行される処理であるものとする。第１タスク処理の一例を図５のフローチャートを用いて説明する。なお、以下の説明において主語が省略されている文においては、ＣＰＵ１０を主語とする。
【００２７】
Ｓ１１０では、変数ＲａｍＡの値を変数ｔｐへ代入する。
次に、Ｓ１２０では、変数ｔｐを６倍する演算（ｔｐ×６）を実行し、演算結果を変数ｔｄに代入する。
【００２８】
続くＳ１３０では、Ｓ１２０の演算結果において、非数が発生したか否かを判断する。具体的には、演算エラーフラグがセットされている場合に、非数が発生したと判断する。演算結果において非数が発生しなかった場合は処理をＳ１４０へ移行させ、非数が発生した場合は処理をＳ１５０へ移行させる。
【００２９】
Ｓ１４０では、変数ｔｐの値を変数ＲａｍＢへ代入して、本第１タスク処理を終了する。
Ｓ１５０では、後述する初期化処理を起動し、起動した初期化処理の終了後に、本第１タスク処理を終了する。
【００３０】
つまり、一例として図５に示す第１タスク処理は、変数ＲａｍＡの値を６倍する演算を行い、演算結果を変数ＲａｍＢの値として記録する処理である。第１タスク処理は、上述の内容に限らず、浮動小数点演算を行う処理であればどのようなものであってもよい。なお、変数ＲａｍＡ、変数ＲａｍＢは、第１タスク処理以外においても参照可能な変数、所謂グローバル変数であり、変数ｔｐ、及び変数ｔｄは、第１タスク処理でのみ参照される変数、所謂ローカル変数であるものとする。
【００３１】
［２−２．第２タスク処理、第３タスク処理］
第２タスク処理、及び第３タスク処理は、周辺回路６０からの割込要求（ハードウェア割込要求）が発生したときに実行される割込処理である。第２タスク処理及び第３タスク処理は、第１タスク処理よりも優先順位が高く設定され、第３タスク処理は第２タスク処理よりも優先順位が高く設定されている。第２タスク処理、第３タスク処理は、浮動小数点演算を行う処理であればどのような処理であってもよい。ここでは、第２タスク処理の一例を図６のフローチャートを用いて説明する。第３タスク処理は、実行する演算処理（Ｓ２１０）、及び演算結果をＲＡＭ３０に記録する（Ｓ２２０）際の領域が異なる以外は、第２タスク処理と同様の処理であるものとする。第３タスク処理では、演算結果は、ＲＡＭ３０における変数ＲａｍＡ及び変数ＲａｍＢ以外の変数が記録される領域に記録されるものとする。なお、以下の説明において主語が省略されている文においては、ＣＰＵ１０を主語とする。
【００３２】
Ｓ２１０では、変数ＲａｍＡを用いた演算処理を実行する。ここでいう演算処理は、浮動小数点演算を行う処理であればどのような処理であってもよい。
Ｓ２２０では、Ｓ２１０の演算結果を変数ＲａｍＡへ代入する。ここでは、変数ＲａｍＡの参照と代入は、第１タスク、第２タスク、及び初期化処理においてのみ実施されることとする。
【００３３】
Ｓ２３０では、Ｓ２１０の演算結果において、非数が発生したか否かを判断する。具体的には、演算エラーフラグがセットされている場合に、非数が発生したと判断する。演算結果において非数が発生しなかった場合は本第２タスク処理を終了し、非数が発生した場合、処理をＳ２４０へ移行させる。
【００３４】
Ｓ２４０では、後述する初期化処理を起動し、本第２タスク処理を終了する。
［２−３．初期化処理］
第１タスク処理のＳ１５０、及び第２タスク処理のＳ２４０にて起動される初期化処理について図７のフローチャートを用いて説明する。本初期化処理は、少なくとも非数が発生した変数とそれに関係する変数に、予め定められた初期化値を代入する処理である。
【００３５】
Ｓ３００では、ＲＡＭ３０において初期化すべき変数が記録されている領域を初期化領域として特定する。本実施形態では、一例として、エラーフラグがセットされたときに実行されていたプログラム中の変数であって浮動小数点型データで表される変数が記録されている領域を、初期化領域として特定する。さらに、該変数を用いた浮動小数点型演算の実行結果が記録される他の変数が記録される領域を、初期化領域として特定する。これらの初期化領域は、エラープログラム特定情報とＲＯＭ２０に記録されている初期化領域特定テーブルとに基づいて特定される。初期化領域特定テーブルの一例を図８に示す。以下では、第２タスク処理にて変数ＲａｍＡの演算結果が非数となった場合について説明する。すなわち、変数ＲａｍＡと、該変数ＲａｍＡを用いた浮動小数点型演算の実行結果が記録される変数ＲａｍＢとが、初期化領域として特定された場合について説明する。
【００３６】
Ｓ３１０では、変数ＲａｍＡに代入する初期化値を算出するための演算を行う。
Ｓ３２０では、変数ＲａｍＢに代入する初期化値を算出するための演算を行う。
Ｓ３３０では、Ｓ３１０にて算出した初期化値を変数ＲａｍＡへ代入する。
【００３７】
Ｓ３４０では、Ｓ３２０にて算出した初期化値を変数ＲａｍＢへ代入する。そして、本初期化処理を終了する。
なお、初期化値の算出が不要である場合、例えば初期化値が０であるような場合は、Ｓ３１０及びＳ３２０を省略し、Ｓ３３０及びＳ３４０にて変数ＲａｍＡ、及び変数ＲａｍＢのそれぞれに初期化値（例えば０）を代入してもよい。
【００３８】
［３．作動］
本実施形態の電子制御装置１内のＣＰＵ１０の作動の一例を、図９に基づいて説明する。図９は、第１タスク処理の実行中に周辺回路６０から第２タスク処理の実行を要求する割込要求が発生したときに、ＣＰＵ１０が実行する処理を時系列に示した図である。
【００３９】
時刻ｔ１では、ＣＰＵ１０は、第１タスク処理を開始する。具体的には、ＣＰＵ１０は、変数ＲａｍＡの値を変数ｔｐに代入する（Ｓ１１０）。
時刻ｔ２では、ＣＰＵ割込要求がＣＰＵ１０に入力される。これにより、ＣＰＵ１０は、退避処理を実行し、割込情報に基づいて、割込処理としての第２タスク処理の実行を開始する。なお、変数ｔｐは、退避処理により、第２タスク処理が実行される前の変数ＲａｍＡの値が代入された状態でスタック領域３０２へ退避されている。
【００４０】
時刻ｔ２〜ｔ３では、ＣＰＵ１０は、第２タスク処理を実行する。ここで、ＣＰＵ１０は、第２タスク処理の実行中に、エラーフラグに基づいて変数ＲａｍＡの演算結果に非数が発生した判断したとする（Ｓ２３０；ＹＥＳ）。ＣＰＵ１０は、初期化処理を起動する。ただし、初期化処理は優先順位が最下位であるため、ここでは初期化処理はまだ開始されない。
【００４１】
時刻ｔ３では、ＣＰＵ１０は第２タスク処理を終了する。続いて、ＣＰＵ１０は、復帰処理を実行し、第１タスク処理を再開する。ここで、変数ｔｐは、第２タスク処理が実行される前の変数ＲａｍＡの値が代入された状態を維持している。ＣＰＵ１０は、変数ｔｐの値を６倍した値を変数ｔｄに代入する（Ｓ１２０）。ここでは、変数ｔｄの演算において非数が発生していないと判断されるため（Ｓ１３０；ＮＯ）、ＣＰＵ１０は、変数ｔｄの値を変数ＲａｍＢに代入する（Ｓ１４０）。つまり、変数ＲａｍＢには、第２タスク処理が実行される前の変数ＲａｍＡの値を６倍した値が代入される。
【００４２】
時刻ｔ４では、ＣＰＵ１０は、第１タスク処理を終了する。
時刻ｔ５では、ＣＰＵ１０は、他に中断された割込前処理が無いため、初期化処理を開始する。初期化処理により、変数ＲａｍＡ及び変数ＲａｍＢが所定の初期化値に初期化される（Ｓ３３０、Ｓ３４０）。
【００４３】
［４．効果］
以上詳述した実施形態によれば、以下の効果が得られる。
［４Ａ］演算において予め定められたエラーが発生した場合、中断されていた全ての割込前処理が終了した後に、少なくともエラーとなった演算結果の記録される領域の値が所定の初期化値に初期化される。換言すれば、割り込みにおける退避処理によってＲＡＭ３０（スタック領域３０２）に退避されていた情報（上記実施形態では、変数ｔｐ及び変数ｔｄ）を利用する処理が全て終了した後に、エラーとなった演算結果の記録される領域（上記実施形態では、変数ＲａｍＡ及び変数ＲａｍＢ）が初期化される。これによれば、割込要求によって中断された割込前演算は全て終了しているため、初期化された領域がこのような割込前演算の再開によって初期化されるべき値である初期化値とは異なる値に書き換えられることが抑制される。つまり、エラーとなった演算結果が記録されている領域を、確実に、正常値である予め定められた初期化値に初期化することができる。この結果、例えば、変数ＲａｍＡ、変数ＲａｍＢに仮に非数が発生したときに、該領域の値がそれぞれ所定の初期化値であることを前提にして制御対象の制御が行われるような場合、制御対象に対して所定の初期化値に基づく予め定められた制御を確実に行うことができる。
【００４４】
図１０は、仮に、第１タスク処理の実行中に、割込要求によって、第２タスク処理に代えて比較例としての比較例処理が実行されるときの、ＣＰＵ１０の処理を時系列に示した図である。比較例処理は、変数ＲａｍＡについての浮動小数点演算を実行し、演算結果に非数が発生した場合に、変数ＲａｍＡ及び変数ＲａｍＢを初期化値に初期化する処理を行うものとする。しかしながら、比較例処理のように割込処理における演算結果に非数が発生したときに初期化を行ったとしても、割込前処理である第１タスク処理が再開されたときに、変数ＲａｍＢは、退避処理によりスタック領域３０２に退避されていた変数ｔｐ及び変数ｔｄに基づいて初期化値とは異なる値に上書きされてしまう。
【００４５】
これに対し、本実施形態は、前述のように、中断されていた全ての割込前処理が終了した後に初期化を行う。スタック領域３０２に退避されていた変数ｔｐ及び変数ｔｄを利用する処理は終了しており、変数ｔｐ及び変数ｔｄによって変数ＲａｍＡ及び変数ＲａｍＢが書き換えられることがない。よって、本実施形態は、エラーとなった演算結果が記録されている領域を、確実に、予め定められた初期化値に初期化することができる。
【００４６】
［４Ｂ］初期化手段は、割込要求に対応する演算の１つであり、優先順位が最下位に定められている。これによれば、確実に、中断されていた全ての割込前処理が終了した後に初期化を行うことができる。
【００４７】
なお、第１実施形態では、電子制御装置１が本発明の一例に相当し、割込コントローラ５０が順序変更手段の一例に相当し、ＣＰＵ１０が判断手段、初期化手段、記録手段の一例に相当し、ＲＡＭ３０が記録部の一例に相当する。また、Ｓ１３０、Ｓ２３０が判断手段としての処理の一例に相当し、Ｓ１５０、Ｓ２４０が初期化手段としての処理の一例に相当し、Ｓ２５０が記録手段としての処理の一例に相当する。また、割込前処理が割込前演算の一例に相当する。
【００４８】
［５．他の実施形態］
以上、本発明の実施形態について説明したが、本発明は、上記実施形態に限定されることなく、種々の形態を採り得ることは言うまでもない。
【００４９】
［５Ａ］上記実施形態では、演算における予め定められたエラーが発生した場合、すなわち、演算結果に非数が発生した場合、無効な演算が行われた場合、及び演算結果に無限大が発生した場合に初期化処理を起動したが、初期化処理の起動はこれに限るものではない。例えば、演算結果に無限大が発生した場合にのみ、初期化処理を起動してもよい。また例えば、無効な演算が行われた場合にのみ、初期化処理を起動してもよい。また、演算結果に非数が発生した場合にのみ、初期化処理を起動してもよい。また、これらが組み合わされた場合に、初期化処理を起動してもよい。いずれの場合においても、エラーが発生した変数を、正常値である所定の初期化値に復帰させることができる。
【００５０】
［５Ｂ］上記実施形態では、図６に示す第２タスク処理において、ＣＰＵ１０は、変数ＲａｍＡ（グローバル変数）についての浮動小数点演算が実行された後に、この演算結果をＲＡＭ３０における変数ＲａｍＡの領域に記録し、その後に、この演算結果が非数であるか否かを判断していた。また、変数ＲａｍＡについては、第１タスク、第２タスク、及び初期化処理においてのみ用いられるように制限されていた。これに対して、ＣＰＵ１０は、変数ＲａｍＡについての浮動小数点演算が実行された後に、一旦、演算結果をＲＡＭ３０における変数ＲａｍＡの領域とは異なる領域に記録し、非数であるか否かを判断してもよい。そして、ＣＰＵ１０は、非数ではないと判断した場合に、演算結果をＲＡＭ３０における変数ＲａｍＡの領域に記録するようにしてもよい。ＲＡＭ３０における変数ＲａｍＡの領域とは異なる領域の一例としては、他の演算の実行時に参照不可能な記録領域、具体的には、ＣＰＵ１０のレジスタやＲＡＭ３０におけるローカル変数の記録される領域が、挙げられる。これによれば、非数ではないと判断された後にグローバル変数である変数ＲａｍＡの演算結果がＲＡＭ３０に書き込まれるため、他の演算においてグローバル変数である変数ＲａｍＡが参照される際に、参照される内容が非数であることが抑制される。つまり、非数となった変数ＲａｍＡを用いる他の演算における非数の発生を抑制することができる。またこの場合、上記実施形態のように、非数が発生するおそれのある変数ＲａｍＡを、第１タスク処理、第２タスク処理及び初期化処理においてのみ用いるように制限する必要が無くなる。
【００５１】
図１１に、第２タスク処理において、変数ＲａｍＡの演算結果を、一旦、ＣＰＵ１０のレジスタに記録する場合のフローチャートの一例を示す。図１１に示す第２タスク処理では、ＣＰＵ１０は、Ｓ２１０において変数ＲａｍＡの演算結果を、ＣＰＵ１０のレジスタに記録する。ここで、ＣＰＵ１０は、レジスタに記録された演算結果において予め定められたエラー（非数）が発生していないと判断した場合（Ｓ２３０；ＮＯ）に、演算結果をＲＡＭ３０の変数ＲａｍＡの領域に書き込む（Ｓ２５０）。一方、ＣＰＵ１０は、レジスタに記録された演算結果において予め定められたエラー（非数）が発生したと判断された場合（Ｓ２３０；ＹＥＳ）に、初期価値をＲＡＭ３０の変数ＲａｍＡの領域に書き込む（Ｓ２５０）。これによれば、変数ＲａｍＡの演算結果に非数が発生した場合に、ＲＡＭ３０における変数ＲａｍＡの領域に非数が記録されることが抑制され、非数となった変数ＲａｍＡを用いる他の演算における非数の発生を抑制することができる。
【００５２】
なお、この場合、ＲＡＭ３０における変数ＲａｍＡの領域とは異なる領域（ＣＰＵ１０のレジスタ）が第１の記録部の一例に相当し、ＲＡＭ３０における変数ＲａｍＡの領域が第２の記録部の一例に相当する。
【００５３】
［５Ｃ］割込コントローラ５０は、多重割込に対応可能に構成されていてもよい。つまり、割込コントローラ５０は、各周辺回路６０から同時に複数の割込要求が入力されると、その中から最も優先順位の高い割込要求を選択し、該割込要求に対応する割込処理の優先順位がＣＰＵ１０が実行中の割込処理よりも高い場合にだけ、ＣＰＵ１０にＣＰＵ割込要求信号を出力するように構成されていてもよい。残りの割込要求については、最も優先順位の高い割込要求に対応する割込処理の終了後に、同様の処理を繰り返せばよい。
【００５４】
図１２は、一例として、第１タスク処理の実行時に、第２タスク処理の割込要求が発生し（時刻ｔ１２）、第２タスク処理の開始後に第３タスク処理の割込要求が発生（時刻ｔ１３）した場合の、ＣＰＵ１０の処理を時系列に示した図である。このような場合においても、優先順位が最下位であるため、第１タスク処理〜第３タスク処理の終了後に初期化処理が開始される（時刻ｔ１７）。従って、上記実施形態と同様の効果が奏される。
【００５５】
ところで、一例として図１２に示すように、第３タスク処理及び第２タスク処理の両方で非数が発生した場合、初期化処理は、第３タスク処理によっても（時刻ｔ１４）、第２タスク処理によっても（時刻ｔ１５）、起動される。このように、初期化処理が複数回起動されることがある場合、複数回初期化処理が行われるのではなく、図１２に示すように一度だけ初期化処理が行われることが望ましい。
【００５６】
［５Ｄ］上記実施形態では、初期化処理の機能がソフトウェアにより実行される例を記載したが、初期化処理の機能の一部又は全部をハードウェアにより実現するようにしてもよい。
【００５７】
［５Ｅ］上記実施形態における１つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を１つの構成要素に統合したりしてもよい。また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を、課題を解決できる限りにおいて省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【００５８】
［５Ｆ］本発明は、前述した電子制御装置１の他、当該電子制御装置１を構成要素とするシステム、当該電子制御装置１を機能させるためのプログラム、このプログラムを記録した媒体、演算方法など、種々の形態で実現することができる。
【符号の説明】
【００５９】
１…電子制御装置  ２…マイクロコンピュータ  １０…ＣＰＵ  ３０…ＲＡＭ  ５０…割込コントローラ。
【図１】
0006332091.tif 000002
【図２】
0006332091.tif 000003
【図３】
0006332091.tif 000004
【図４】
0006332091.tif 000005
【図５】
0006332091.tif 000006
【図６】
0006332091.tif 000007
【図７】
0006332091.tif 000008
【図８】
0006332091.tif 000009
【図９】
0006332091.tif 000010
【図１０】
0006332091.tif 000011
【図１１】
0006332091.tif 000012
【図１２】
0006332091.tif 000013