(57)【要約】【課題】  非数の発生箇所を正確に特定し、非数の発生に伴う制御不良を未然に防止することを目的とする。【解決手段】    制御ＥＣＵ１は、関数の演算を行う演算手段と、関数の演算の処理過程で導出された変数が非数であるか否かを判定する非数判定手段と、関数又は関数内の所定演算ごとの非数判定結果を、関数又は所定演算の識別情報に関連付けてＲＡＭ３０に書き込む書込み手段とを備えている。従って、非数の発生箇所を正確に特定し、非数の発生に伴う制御不良を未然に防止することができる。【選択図】        図２
2007213529.tif 000002
【特許請求の範囲】
【請求項１】
制御プログラムの実行に伴って行われる関数の演算を行う演算手段と、
前記関数演算の処理過程で導出された変数が非数であるか否かを判定する非数判定手段と、
前記非数判定手段の判定結果を記憶するための記憶手段と、
前記関数の非数判定結果を、前記関数の識別情報に関連付けて前記記憶手段に書き込む書込み手段と、
を有することを特徴とする電子制御装置。
【請求項２】
前記記憶手段は、演算中の関数に設定された識別情報を記録する第１記憶領域と、
前記演算中の関数によって処理を中断している関数に設定された識別情報を記録する第２記憶領域と、
前記関数に設定された識別情報ごとに、演算結果に非数が発生しているか否かを記録する第３記憶領域とを有し、
前記書込み手段は、関数の演算開始時に、その直前に演算を行っていた関数に非数が発生していると判定された場合、前記第３記憶領域に非数の発生情報を書き込むことを特徴とする請求項１記載の電子制御装置。
【請求項３】
前記変数が導出されるごとに、該変数を格納する記憶手段のアドレスを記録する管理テーブルと、
非数発生時に、前記管理テーブルに記録された前記記憶手段のアドレスの変数が非数であるか否かを判定して、非数となった変数を格納する前記記憶手段のアドレスを特定する特定手段と、
を有することを特徴とする請求項１記載の電子制御装置。
【請求項４】
非数となった変数を格納する前記記憶手段の領域を消去、又は該領域に初期値を記録するリセット手段を備えることを特徴とする請求項２又は３記載の電子制御装置。
【請求項５】
前記特定手段によって非数となった変数が特定されると、前記リセット手段は、該変数以降に演算された変数を格納する前記記憶手段の領域をリセットすることを特徴とする請求項４記載の電子制御装置。
【請求項６】
前記特定手段は、前記管理テーブルを参照して所定のアドレスに記憶された変数が非数であるか否かを判定し、該変数が非数ではないと判定すると、それ以前に演算された変数も非数ではないと判定することを特徴とする請求項３記載の電子制御装置。
【請求項７】
前記演算手段によって演算された変数をログとして前記記憶手段に書込み、所定時間経過後に消去するログ記録手段を備えることを特徴とする請求項１から６のいずれか一項記載の電子制御装置。
【請求項８】
非数の発生頻度をカウントするカウント手段を備え、
前記関数又は前記識別情報ごとにカウントすることを特徴とする請求項１から７のいずれか一項記載の電子制御装置。
【請求項９】
制御プログラムの実行に伴い行われる関数の演算を行い、演算結果の変数に非数が含まれているか否かを判定する非数判定方法であって、
前記関数の演算処理過程で導出された変数が非数であるか否かを判定するステップと、
前記関数の非数判定結果を、前記関数の識別情報に関連付けて前記記憶手段に書き込むステップと、
を有することを特徴とする非数判定方法。
【請求項１０】
制御プログラムの実行に伴い行われる関数の演算を行い、演算結果の変数に非数が含まれているか否かを判定する非数判定プログラムであって、
前記関数の演算処理過程で導出された変数が非数であるか否かを判定する処理と、
前記関数の非数判定結果を前記記憶手段に書き込む処理と、
をコンピュータに実行させることを特徴とする非数判定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点演算等の非数が発生し得る演算を含む関数をプロセッサ及びメモリにより演算処理する技術に関する。
【背景技術】
【０００２】
近年、自動車のエンジン制御などに適用される制御装置においても、浮動小数点演算プロセッサを用いて浮動小数点型データの演算を実行するものが用いられるようになってきた（例えば、特許文献１及び２参照）。浮動小数点型データは、固定小数点型データの演算と比較して、演算速度が速い、演算精度が高い、広範囲のデータを扱うことができる、等のメリットがある。この浮動小数点型データは、その指数部と仮数部の組み合わせにより、正規化数、非正規化数、無限大、ゼロ及び非数に区別される。非数は、０／０、５／０等の数値として表現できない演算結果を示す。
【０００３】
ところで、エンジン制御等においては、非数が発生しないように制御プログラムが作成されるが、バグ等により制御用変数に非数が発生すると、この制御用変数が再度演算に使用されてその演算結果も非数となる。すなわち、非数が伝播し、非数が発生した後の演算がすべて非数となり、制御不能になる恐れがある。
【０００４】
そこで、浮動小数点演算を行う場合、非数発生を検出するために、ＥＦＧレジスタを設けている。ＥＦＧレジスタは、非数発生時に特定のビットを立てるレジスタである。非数発生の要因は複数存在するので、発生原因ごとに複数のビットが用意されている。
【０００５】
【特許文献１】特開２００１−１８４１９２号公報
【特許文献２】特開２００４−２７８４８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、複数の関数が存在し、これらが浮動小数点演算を行っている場合、非数の発生した関数を特定することができない場合がある。例えば、図１に示すように優先度の低い関数Ａを実行中に、優先度の高い関数Ｂによる割り込みが発生した場合が挙げられる。
非数が発生しているか否かの判定処理は、最後に行われる。このため図１に示すように関数Ｂの割り込みが入る前であって、関数Ａの前半の処理において非数が発生した場合、関数Ｂの演算が終了するまで非数が発生しているか否かは分からない。このときＥＦＧフラグの値も関数Ｂの終了まで保持されるので、関数Ａで非数が発生しているのか、関数Ｂで非数が発生しているのかを特定することができない。
【０００７】
さらに、非数が発生した場合に、非数を記録しているメモリ領域を正確に特定しないと、非数が伝播し、制御に影響を及ぼすことになる。
【０００８】
本発明は上記事情に鑑みてなされたものであり、非数の発生箇所を正確に特定し、非数の発生に伴う制御不良を未然に防止することを目的とする。
【課題を解決するための手段】
【０００９】
かかる目的を達成するために本発明の電子制御装置は、制御プログラムの実行に伴って行われる関数の演算を行う演算手段と、前記関数演算の処理過程で導出された変数が非数であるか否かを判定する非数判定手段と、前記非数判定手段の判定結果を記憶するための記憶手段と、前記関数の非数判定結果を、前記関数の識別情報に関連付けて前記記憶手段に書き込む書込み手段とを有する構成としている。
このように本発明は、関数の非数判定結果を、関数の識別情報に関連付けて記憶手段に書き込んでいるので、非数の発生した箇所を正確に特定することができる。
【００１０】
上記電子制御装置において、前記記憶手段は、演算中の関数に設定された識別情報を記録する第１記憶領域と、前記演算中の関数によって処理を中断している関数に設定された識別情報を記録する第２記憶領域と、前記関数に設定された識別情報ごとに、演算結果に非数が発生しているか否かを記録する第３記憶領域とを有し、前記書込み手段は、関数の演算開始時に、その直前に演算を行っていた関数に非数が発生していると判定された場合、前記第３記憶領域に非数の発生情報を書き込むとよい。
従って、関数に割り込み処理が発生しても、関数ごとに非数の発生情報を記録することができる。
【００１１】
上記電子制御装置において、前記変数が導出されるごとに、該変数を格納する記憶手段のアドレスを記録する管理テーブルと、非数発生時に、前記管理テーブルに記録された前記記憶手段のアドレスの変数が非数であるか否かを判定して、非数となった変数を格納する前記記憶手段のアドレスを特定する特定手段とを有しているとよい。
従って、非数となった変数を格納する記憶手段の記憶領域を簡単に特定することができる。
【００１２】
上記電子制御装置において、非数となった変数を格納する前記記憶手段の領域を消去、又は該領域に初期値を記録するリセット手段を備えるとよい。
従って、非数を削除して、非数の発生に伴う制御不良を未然に防ぐことができる。また、非数となった変数を格納する前記記憶手段の領域だけを削除するので、正常な他の変数はそのまま保持することができる。
【００１３】
上記電子制御装置において、前記特定手段によって非数となった変数が特定されると、前記リセット手段は、該変数以降に演算された変数を格納する前記記憶手段の領域をリセットするとよい。
非数となった特定を特定する時間を短縮することができる。
【００１４】
上記電子制御装置において、前記特定手段は、前記管理テーブルを参照して所定のアドレスに記憶された変数が非数であるか否かを判定し、該変数が非数ではないと判定すると、それ以前に演算された変数も非数ではないと判定するとよい。
非数となった特定を特定する時間を短縮することができる。
【００１５】
上記電子制御装置において、前記浮動小数点演算手段によって演算された変数をログとして前記記憶手段に書込み、所定期間経過後に消去するログ記録手段を備えるとよい。
変数がどのように変動して非数になったかを検出し、非数発生原因を特定することができる。
【００１６】
上記電子制御装置において、非数の発生頻度をカウントするカウント手段を備え、前記関数又は前記識別情報ごとにカウントするとよい。
非数の発生原因を特定したり、非数の発生が多いロジックを使用しない等の対策を取ることができる。
【００１７】
本発明の非数判定方法は、制御プログラムの実行に伴い行われる関数の演算を行い、演算結果の変数に非数が含まれているか否かを判定する非数判定方法であって、前記関数の演算処理過程で導出された変数が非数であるか否かを判定するステップと、前記関数の非数判定結果を、前記関数の識別情報に関連付けて前記記憶手段に書き込むステップと、を有している。本発明の非数判定プログラムは、制御プログラムの実行に伴い行われる関数の演算を行い、演算結果の変数に非数が含まれているか否かを判定する非数判定プログラムであって、前記関数の演算処理過程で導出された変数が非数であるか否かを判定する処理と、前記関数の非数判定結果を前記記憶手段に書き込む処理と、をコンピュータに実行させることを特徴としている。
【発明の効果】
【００１８】
本発明によれば、非数の発生箇所を正確に特定し、非数の発生に伴う制御不良を未然に防止することができる。
【発明を実施するための最良の形態】
【００１９】
添付図面を参照しながら本発明の最良の実施例を説明する。
【実施例１】
【００２０】
図２は本発明に係る電子制御装置の構成図である。本実施例は、電子制御装置をエンジン制御に適用した制御ＥＣＵ１を例に説明する。
【００２１】
制御ＥＣＵ１は、図２に示すように、ＣＰＵ１０、ＲＯＭ（リードオンリーメモリ）２０、記憶装置としてのＲＡＭ（ランダムアクセスメモリ）３０、Ｉ／Ｏ４０等から構成され、これらはバスにより相互に接続されている。
【００２２】
ＣＰＵ１０は、ＲＯＭ２０に記憶された制御用プログラムに従って各種演算を実行すると共に、浮動小数点型データを用いた演算を実行する。
ＲＯＭ２０は、制御用プログラム、後述するバックアップ処理や非数チェック処理のためのプログラム、各種データ等を記憶している。
【００２３】
ＲＡＭ３０は、例えば、フラッシュメモリ等の不揮発性メモリで構成され、各種データを読み書き可能に記憶する。このＲＡＭ３０は、図３に示すように、
関数の演算結果の変数をログとして記録するスタンバイＲＡＭ領域５１と、通常のＲＡＭ領域５２とが設けられる。ＲＡＭ領域５２内には、関数や関数のチェック箇所ごとに設定されるＩＤを記録するＩＤ保存用バッファや、管理テーブルを記録した領域５３と、ＲＯＭ２０に格納された制御プログラムの実行時に、各プログラムで使用する領域とに分かれる。なお、関数のチェック箇所ごとに設けられたＩＤとは、関数内の所定演算、例えば非数チェックの演算にＩＤを付けておき、この非数チェックの演算で非数の発生が確認できたかを記録する際に使用する。また、図３ではＲＡＭの領域を制御プログラムＡ，Ｂ，Ｃの３つのプログラム用に分割し、制御プログラムＡ用の領域が非数判定に使用する記憶領域である場合を例示している。制御プログラムＡに用意された領域には、判定結果を保存する結果保存ＲＡＭや、演算中の関数のＩＤを記録するチェック中ＲＡＭの領域が設けられている。
Ｉ／Ｏ４０は、エンジン１００から得られる、温度、回転数、吸入空気量、燃料噴射量等の各種状態量が入力され、これらのデータをＣＰＵ１０へ出力する。
【００２４】
本実施例は、関数の演算開始時に、関数開始時処理chksta（IDｘ）のコマンドを、終了時にchk(IDx)のコマンドを実施することで非数発生箇所を正確に特定する。
【００２５】
chksta（IDｘ）のコマンドの内容は、図４（Ａ）に示すように、このコマンドが対象とするIDｘ以外の他のＩＤの関数をＣＰＵ１０で実行中であった場合、ＥＦＧフラグの記録内容を結果保存用ＲＡＭにコピーし、ＥＦＧフラグをクリアする。ＥＦＧフラグは、処理中の関数に非数が発生したか否かを記録する用途に用いられる。
【００２６】
またchk(IDx)のコマンドの内容は、図４（Ｂ）に示すようにＥＦＧフラグの記録内容を結果保存用ＲＡＭにｏｒ演算で格納し、ＥＦＧフラグをクリアする。本実施例は、図５に示すように結果保存用ＲＡＭの他に、処理中又は処理途中の関数のＩＤを記録するチェック中ＲＡＭを設けている。割り込みが発生すると、チェック中ＲＡＭ（Ａ）のＩＤをチェック中ＲＡＭ（Ｂ）に書き込み、割り込んだ関数のＩＤをチェック中ＲＡＭ（Ａ）に書き込む。なお、チェック中ＲＡＭ（Ａ）が現在演算中の関数のＩＤを記録するものであり、チェック中ＲＡＭ（Ｂ）には、演算中の関数に割り込まれた関数のＩＤを記録する。本実施例ではさらにチェック中ＲＡＭ（Ｃ）を設けて、チェック中ＲＡＭ（Ｂ）に記録した関数によって割り込まれた関数を記録している。
【００２７】
図５を参照しながら低優先度の関数Ａの処理中に、高優先度の関数Ｂが割り込んだ場合の非数発生監視方法を説明する。
まず、関数Ａの実行中は、この関数のＩＤをチェック中ＲＡＭ（Ａ）に記録する。低優先度の関数Ａを識別するＩＤ「１」がチェック中ＲＡＭ（Ａ）に記録される。コマンドChkst(ID1)では、他に演算中の関数がないので、特別な処理は行わない。なお、関数Ａの前半部分を実行中に、非数が発生すると、図５のａに示すようにこれをＥＦＧフラグに記録する。
【００２８】
次に、高優先度の関数Ｂによる割り込みが発生すると、チェック中ＲＡＭ（Ａ）に記録した関数ＡのＩＤ番号をチェック中ＲＡＭ（Ｂ）に記録し、チェック中ＲＡＭ（Ａ）には割り込んだ関数ＢのＩＤ番号「２」が記録される。そして、Chkst(ID2)を実行する。この処理では、図５にｂで示すようにＥＦＧフラグの内容を結果保存用ＲＡＭに書込み、図５にｃで示すようにＥＦＧフラグをクリアする。結果保存用ＲＡＭにＥＦＧフラグの記録内容「１」が書き込まれる。
【００２９】
関数Ｂの演算が終了すると、Chk(ID2)を実行する。まず、ＥＦＧフラグの記録内容を結果保存用ＲＡＭにＯＲ演算で書き込む。結果保存用ＲＡＭは、実行中の関数又は実行中の関数によって待機している関数の非数発生結果を記録するものであり、結果保存用ＲＡＭの１ビットを１つの関数に割り当てている。ここでは、図５にｄで示すように最下位ビットには、関数Ａで非数が発生したことを示す「１」が記録されているので、その上位のビットに非数発生なしを示す「０」が書き込まれる。その後、図５にｅで示すようにＥＦＧフラグをクリアする。さらに関数の演算が一つ終了したので、チェック中ＲＡＭ（Ｂ）の記録内容をチェック中ＲＡＭ（Ａ）に書込み、チェック中ＲＡＭ（Ｃ）の記録内容をチェック中ＲＡＭ（Ｂ）に書き込む。
【００３０】
その後、関数Ａの後半の演算を行う。関数Ａの演算が終了すると、Chk(ID１)を実行し、ＥＦＧフラグの記録内容を結果保存用ＲＡＭにＯＲ演算で書き込む。最下位ビットに、非数発生なしを示すビット「０」が書き込まれる。なお、チェック中ＲＡＭは現在演算中の関数ＩＤと戻り先の関数ＩＤとをスタック状に記録するものであり、現在演算中の関数のＩＤから結果保存用ＲＡＭの非数判定結果を格納するビットが決定される。
【００３１】
このように本実施例は、関数ごとにＩＤを設定し、非数発生のチェック結果をＩＤ毎に記録するようにしたので、どの関数で非数が発生したのかを容易に特定することができる。
【００３２】
図６及び図７に示すフローチャートを参照しながら制御ＥＣＵ１の動作手順を説明する。
ある関数（以下では関数Ａと呼ぶ）の演算が開始されると（ステップＳ１／ＹＥＳ）、制御ＥＣＵ１は、Chk(ID1)のコマンドを実行する（ステップＳ２）。ここでは、他に演算中の関数がないので、特別な処理は行わない。
【００３３】
次に、制御ＥＣＵ１は、浮動小数点演算の実行中は、非数が発生しているか（ステップＳ３）、他の関数の割り込みがあるか否か（ステップＳ５）を監視する。制御ＥＣＵ１は、浮動小数点演算毎にその際に用いられる浮動小数点型データが非数であるか否かを判定する。非数が発生すると（ステップＳ３／ＹＥＳ）、ＥＦＧフラグを立てる（ステップＳ４）。また、割り込みの発生がなかった場合には（ステップＳ５／ＮＯ）、関数Ａの演算が終了したか否かを判定する（ステップＳ６）。関数Ａの演算が終了していない場合（ステップＳ６／ＮＯ）、ステップＳ３と、Ｓ５の判定を繰り返し行う。また、関数Ａの演算が終了した場合には、Chk(ID１)を実行し、ＥＦＧフラグの記録内容を結果保存用ＲＡＭにＯＲ演算で書き込む。
【００３４】
また、関数Ａの演算中に、関数Ａよりも優先度の高い関数（以下では関数Ｂと呼ぶ）の割り込みが発生すると（ステップＳ５／ＮＯ）、図７に示すサブルーチンαの処理へ移行する。以下、図７に示すサブルーチンαについて説明する。
サブルーチンαでは、実行中の関数Ｂ用にChksta(ID2)のコマンドを実行する（ステップＳ１０）。この処理では、図５にｂで示すようにＥＦＧフラグの内容を結果保存用ＲＡＭに書込み、図５にｃで示すようにＥＦＧフラグをクリアする。もし、処理途中の関数Ａに非数が発生していると、結果保存用ＲＡＭにＥＦＧフラグの記録内容「１」が書き込まれる。
【００３５】
その後、制御ＥＣＵ１は、関数Ｂの実行中、非数が発生しているか（ステップＳ１１）、割り込みが発生しているか否かを判定する（ステップＳ１３）。非数が発生している場合には（ステップＳ１１／ＹＥＳ）、ＥＦＧフラグを立てる（ステップＳ１２）。また関数Ｂの実行中に関数Ｂよりも優先度の高い関数（以下では関数Ｃと呼ぶ）の割り込みが発生すると（ステップＳ１３／ＹＥＳ）、この処理フローと同一の手順で行われるサブルーチンβに移行する。サブルーチンβの処理はサブルーチンαと同一であるため説明を省略する。関数Ｂの実行中に関数Ｂよりも優先度の高い関数Ｃの割り込みがなかった場合には（ステップＳ１３／ＮＯ、かつステップＳ１４／ＹＥＳ）、Chk(IDｘ)のコマンドを実行し（ステップＳ１５）、ＥＦＧフラグをクリアする（ステップＳ１６）。その後、ステップＳ３に移行する。また、サブルーチンβに移行し、関数Ｃの演算が終了すると、サブルーチンαのステップＳ１１に移行して、上述したステップＳ１１〜Ｓ１６の手順を繰り返す。
【００３６】
なお、図５に示す実施例では、関数の数だけチェック中ＲＡＭを設けて、関数のＩＤをチェック中ＲＡＭに記録しているが、図８に示すように所定の記録容量を備えた関数ＩＤ保存用バッファを別途設けて、このバッファに記録することもできる。例えば、１つの関数のＩＤの記録用に１Ｂｙｔｅの領域を用意し、割り込み演算が入るごとに、一つ前の関数を一段下のバッファに記録し、空いた領域に割り込んだ関数のＩＤを記録する。
【実施例２】
【００３７】
本実施例では、浮動小数点演算を行う変数、演算結果の変数を記録したＲＡＭ３０のアドレスを管理テーブルに記録しておいて、非数発生時に、この管理テーブルを参照して非数を格納しているＲＡＭ３０の記憶領域を特定するものである。管理テーブルの一例を図９（Ａ）に示す。管理テーブルには、変数を格納した領域の先頭アドレスを記録しておく。この先頭アドレスから予め設定された所定領域（例えば４Ｂｙｔｅ）を探索することで、非数となった変数を検出する。
【００３８】
図１０に示すフローチャートを参照しながら制御ＥＣＵ１の動作手順を説明する。
まず、制御ＥＣＵ１は、結果保存用ＲＡＭを参照し、非数が発生しているか否かを判定する（ステップＳ２１）。非数が発生していると判定すると（ステップＳ２１／ＹＥＳ）、ＲＡＭ３０の探索を開始する（ステップＳ２２）。制御ＥＣＵ１は、図９（Ａ）に示す管理テーブルを参照して、変数が記録されたＲＡＭ３０の先頭アドレスを読み出す。そして、図９（Ｂ）に示すように読み出した先頭アドレスからＲＡＭ３０を探索し、非数を検出する（ステップＳ２３）。変数が非数となっている場合、特定のビット列が記録されているので、これを制御ＥＣＵ１は検出する。
【００３９】
制御ＥＣＵ１は、非数を検出した場合（ステップＳ２４／ＹＥＳ）、非数を検出したＲＡＭ３０の記憶領域からデータを消去する（ステップＳ２５）。この他に、予め設定されている初期値を入力してもよい。
【００４０】
テーブルに記録された先頭アドレスから所定アドレス（例えば、先頭アドレスから４Ｂｙｔｅ等、データの記録に使用する領域）までの探索が終了すると（ステップＳ２６／ＹＥＳ）、テーブルに記録した全アドレスの探索が終了したか否かを判定する（ステップＳ２８）。また、所定アドレスまでの探索が終了していない場合には（ステップＳ２６／ＮＯ）、アドレスをイクリメントして所定アドレスまでのＲＡＭ領域を探索する。
また、テーブルに記録した全アドレスの探索が終了すると（ステップＳ２８／ＹＥＳ）、制御ＥＣＵ１はこの処理を終了する。
【００４１】
なお、このテーブルを図１１に示すように関数又はＩＤごとに設けておき、非数チェックで非数ありと判定された関数又はＩＤのテーブルだけを探索することもできる。これにより、非数発生時に変数を特定する処理にかかる時間を短縮させることができる。
【００４２】
このように本実施例は、非数が記録されたＲＡＭ領域を特定して、そのＲＡＭ領域を消去、又はＲＡＭ領域に初期値を代入しているので、正常なデータを記録した他のＲＡＭ領域のデータを残すことができる。
【００４３】
さらに、ＲＡＭ１に記録した変数を使用して演算を行い、演算結果をＲＡＭ２に記録する。またＲＡＭ２に記録した変数を使用して演算を行い、演算結果をＲＡＭ３に記録するといったように変数の記録手順に順番がある場合、ＲＡＭ１に記録したデータが非数の場合、ＲＡＭ２，ＲＡＭ３に記録した変数も非数となる。このため、ＲＡＭ１で非数を検出すると、ＲＡＭ１に記録した変数を使用して求めた変数の記録領域をすべてクリアしてもよい。
また、これとは逆にＲＡＭ３に記録した変数が非数でなければ、ＲＡＭ１，ＲＡＭ２に記録した変数も非数ではないと判る。そこで、ＲＡＭの先頭アドレスから探索を開始するのではなく、所定アドレスごとに非数探索を行い、非数が出現していなければ、そのアドレスよりも前のアドレスには非数が発生していないと判定してもよい。これにより非数探索時間をさらに短縮することができる。
【００４４】
また、所定期間にわたって変数のログを記録しておくことで、非数発生時にログを参照すれば、どのように変数が変動して非数に陥ったかを特定することも可能である。
制御ＥＣＵ１は、非数を検出すると、その関数の演算に使用した変数、及び演算結果の変数をログとして記録する。また、非数が発生した変数、又はＩＤの変数群についてログを取ることもできる。このようにしてログを残すメモリの記憶容量を削減させることができる。また、ログは、制御ＥＣＵ１内のメモリではなく、制御ＥＣＵ１の外部に設けたメモリに保存することもできる。
【００４５】
さらに、カウンタを用意しておいて、非数発生時にカウントして非数の発生頻度を検出することもできる。このカウンタは、関数単位、変数単位で持たせることもできる。これにより、非数発生原因を特定することもできる。さらに、非数の発生頻度の高いロジックは使用しないように切り替えることも可能となる。
【００４６】
さらに、非数ではなく、正常値を検出した回数をカウントするカウンタを設けて、正常検出を予め決められた値以上検出した場合には、非数検出の処理を終了させてもよい。
【００４７】
また上述した実施例では、関数それぞについて「非数」か「非数ではない」かを記憶している。これに限らず、非数の関数についてだけ、その関数のＩＤを記憶する構成としてもよい。
【００４８】
上述した実施例は本発明の好適な実施例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
【図面の簡単な説明】
【００４９】
【図１】従来の非数判定処理を説明するための図である。
【図２】制御ＥＣＵの構成を示すブロック図である。
【図３】ＲＡＭの記憶領域を説明するための図である。
【図４】関数の開始時と終了時とに行うコマンドを示す図である。
【図５】第１実施例の制御手順を示す図である。
【図６】制御ＥＣＵの処理手順を示すフローチャートである。
【図７】サブルーチンの処理手順を示すフローチャートである。
【図８】演算中の関数のＩＤを保存する他のバッファの構成を示す図である。
【図９】管理テーブルの記録内容と、非数を記録したＲＡＭ領域を特定すう方法を説明するための図である。
【図１０】第２実施例の動作手順を示すフローチャートである。
【図１１】第２実施例の管理テーブルの記録内容を示す図である。
【符号の説明】
【００５０】
１  制御ＥＣＵ
１０  ＣＰＵ
２０  ＲＯＭ
３０  ＲＡＭ
４０  Ｉ／Ｏ
１００  エンジン
【図１】
2007213529.tif 000003
【図２】
2007213529.tif 000004
【図３】
2007213529.tif 000005
【図４】
2007213529.tif 000006
【図５】
2007213529.tif 000007
【図６】
2007213529.tif 000008
【図７】
2007213529.tif 000009
【図８】
2007213529.tif 000010
【図９】
2007213529.tif 000011
【図１０】
2007213529.tif 000012
【図１１】
2007213529.tif 000013