(57)【要約】【課題】メモリの使用容量を抑えつつ浮動小数点演算等の演算において非数が発生する前後の演算結果が大きく食い違うことがない関数の演算処理方法を提供する。【解決手段】ＲＡＭの所定アドレスに記憶されて浮動小数点演算を含む関数の演算によりその値が更新される変数ＡＢＹＦを、関数の演算の実行前にＲＡＭのテンポラリ変数に一時的にバックアップし（ステップＳＴ１）、関数の演算において非数の発生の有無をチェックし（ステップＳＴ５）、非数が発生した場合に変数ＡＢＹＦの値をバックアップ値で更新する（ステップＳＴ６）。【選択図】図２
2007079649.tif 000002
【特許請求の範囲】
【請求項１】
所定アドレスの記憶領域に記憶されて非数の発生し得る演算を含む関数の演算によりその値が更新される変数を、前記関数の演算の実行前に他の記憶領域に一時的にバックアップするバックアップステップと、
前記関数の演算において非数の発生の有無をチェックする非数チェックステップと、
非数が発生した場合に前記変数の値を前記バックアップ値で更新する更新ステップと、
を有することを特徴とする関数の演算処理方法。
【請求項２】
非数の発生が検出された非数発生演算における変数と共に、前記非数発生演算より前の演算における変数の値を前記バックアップ値で更新する、
ことを特徴とする請求項１に記載の関数の演算処理方法。
【請求項３】
非数発生演算の非数の発生回数をカウントし、前記発生回数に応じて前記非数発生演算より前の演算における変数の値を更新する、
ことを特徴とする請求項２に記載の関数の演算処理方法。
【請求項４】
所定アドレスの記憶領域に記憶されて非数の発生し得る演算を含む関数の演算によりその値が更新される変数を前記関数の演算の実行前に前記記憶装置の他の記憶領域に一時的にバックアップするバックアップ手段と、
前記関数の演算において非数の発生の有無をチェックし、非数が発生した場合に前記変数の値を前記バックアップ値で更新する非数チェック処理手段と、
を有することを特徴とする関数の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点演算等の非数が発生し得る演算を含む関数をプロセッサ及びメモリより演算処理する演算処理方法に関する。
【背景技術】
【０００２】
近年、自動車のエンジン制御などに適用される制御装置においても、浮動小数点演算プロセッサを用いて浮動小数点型データの演算を実行するものが知られている（例えば、特許文献１等参照）。浮動小数点型データは、固定小数点型データに演算と比較して、演算速度が速い、演算精度が高い、広範囲のデータを扱うことができる、等のメリットがある。この浮動小数点型データは、その指数部と仮数部の組み合わせにより、正規化数、非正規化数、無限大、ゼロ及び非数に区別される。非数は、０／０等の数値として表現できない演算結果を示す。
【特許文献１】特開２００１−２８２５０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、エンジン制御等においては、非数が発生しないように制御プログラムが作成されるが、バグ等により制御用変数に非数が発生すると、この制御用変数が再度演算に使用されてその演算結果も非数となる非数の伝播が発生する可能性がある。
この非数の伝播を防ぐ方法として、例えば、関数の使用する変数に非数が発生した時点で、その関数内の変数をすべてゼロにする方法や、各変数の初期値をＲＯＭ（リード  オンリー  メモリ）に記憶しておき、非数が発生した時点で変数に初期値を代入する方法などが考えられる。
しかしながら、関数内で使用する変数をすべてゼロにすると、その後の演算結果が非数の発生前の演算結果と大きく食い違う可能性があり、エンジン等の制御を継続するのが困難な状況となる可能性がある。また、ＲＯＭに予め初期値を記憶する方法では、大容量のＲＯＭが必要になる。
【０００４】
本発明は、上記の事情に鑑みて成されたものであり、その目的とするところは、メモリの使用容量を抑えつつ浮動小数点演算等において非数が発生する前後の演算結果が大きく食い違うことがない非数が発生し得る演算を含む関数の演算処理方法及び装置を提供することにある。
【課題を解決するための手段】
【０００５】
本発明に係る関数の演算処理方法は、所定アドレスの記憶領域に記憶されて非数の発生し得る演算を含む関数の演算によりその値が更新される変数を、関数の演算の実行前に他の記憶領域にバックアップするバックアップステップと、関数の演算において非数の発生の有無をチェックする非数チェックステップと、非数が発生した場合に変数の値をバックアップ値で更新する更新ステップと、を有することを特徴としている。
この構成によれば、所定アドレスの記憶領域に記憶される変数の値は、非数の発生した演算結果で更新されずに、バックアップされた非数の発生前の値で更新される。すなわち、非数の発生時には、非数の発生していない前回の演算結果で変数の値が更新されるので、非数が発生する前後の演算結果が大きく食い違うことがない。また、演算実行後、非数チェックが終了するまでの一時的な期間のみ変数を他の記憶領域にバックアップする構成としているので、各変数についてそれぞれ所定アドレスのバックアップ領域をもつ必要がなく、記憶装置の使用容量の増加を抑制できる。
【０００６】
上記構成において、非数の発生が検出された非数発生演算における変数と共に、非数発生演算より前の演算における変数の値を前記バックアップ値で更新する、構成を採用できる。
この構成によれば、非数の発生が検出された際に、その発生原因がその演算以前の演算にある場合に、非数発生演算より前の演算における変数の値をバックアップ値で更新することにより、非数の発生が繰り返されることを防止できる。
【０００７】
上記構成において、非数発生演算の非数の発生回数をカウントし、発生回数に応じて非数発生演算より前の演算における変数の値を更新する、構成を採用できる。
この構成によれば、非数の発生回数が多い演算における変数のみを強制的にバックアップ値で更新することにより、非数の発生頻度の低い演算の変数の値を自然に正常値に復帰させることができる。
【０００８】
本発明に係る関数の演算処理装置は、所定アドレスの記憶領域に記憶されて非数の発生し得る演算を含む関数の演算によりその値が更新される変数を、関数の演算の実行前に他の記憶領域にバックアップするバックアップ手段と、関数の演算において非数の発生の有無をチェックし、非数が発生した場合に変数の値をバックアップ値で更新する非数チェック処理手段と、を有することを特徴としている。
【発明の効果】
【０００９】
本発明によれば、メモリの使用容量を抑えつつ、浮動小数点演算等の演算において非数が発生する前後の演算結果が大幅に食い違うのを防止できる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の最良の実施形態について、添付図面を参照しつつ説明する。
【実施例１】
【００１１】
図１は本発明の実施例１に係る演算処理装置の構成図である。尚、本実施例では、演算処理装置をエンジン制御に適用される場合について説明する。
【００１２】
この演算処理装置は、図１に示すように、プロセッサ１０、ＲＯＭ２０、記憶装置としてのＲＡＭ（ランダム  アクセス  メモリ）３０、Ｉ／Ｏ４０等から構成され、これらはバスにより相互に接続されている。
【００１３】
プロセッサ１０は、ＲＯＭ２０に記憶された制御用プログラムに従って各種演算を実行すると共に、浮動小数点型データを用いた演算を実行する。
ＲＯＭ２０は、制御用プログラム、後述するバックアップ処理や非数チェック処理のためのプログラム、各種データ等を記憶している。尚、プロセッサ１０及びＲＯＭ２０に記憶されたプログラムによりバックアップ手段及び非数チェック処理手段が構成される。
【００１４】
ＲＡＭ３０は、例えば、フラッシュメモリ等で構成され、各種データを読み書き可能に記憶する。このＲＡＭ３０は、図１に示すように、エンジン制御に必要な制御用の変数を記憶する変数領域、各種関数の演算時に作業領域として使用されるテンポラリ領域等から構成されている。
Ｉ／Ｏ４０は、エンジン１００から得られる、温度、回転数、吸入空気量、燃料噴射量等の各種状態量が入力され、これらのデータをプロセッサ１０へ出力する。
【００１５】
次に、上記の演算処理装置における浮動小数点演算を含む関数の演算処理方法の一例について図２及び図３を参照して説明する。ここで、図２はエンジン制御における空燃比を算出するための関数の演算を実行したときの処理の一例を示すフローチャートであり、図３は演算処理装置におけるＲＡＭ３０の使用方法の一例を説明するための図である。尚、図２に示す関数はエンジン制御に係る空燃比を演算する関数である。
【００１６】
演算処理装置は、図２に示すように、先ず、ＲＡＭ３０の変数領域の所定アドレスに記憶されている変数ＡＢＹＦをテンポラリ領域において定義されているテンポラリ変数ｔ＿ＡＢＹＦに一時的にバックアップする（ステップＳＴ１）。このバックアップ処理により、変数ＡＢＹＦは、図３に示すように、関数の演算の実行前にＲＡＭ３０の他の記憶領域であるテンポラリ領域に記憶される。
【００１７】
次いで、吸入空気量を取得すると共に（ステップＳＴ２）、燃料噴射量を取得し（ステップＳＴ３）、これらを用いて空燃比を算出する浮動小数点演算を実行する（ステップＳＴ４）。
【００１８】
次いで、空燃比の演算に非数が発生したかを判断する（ステップＳＴ５）。例えば、吸入空気量及び燃料噴射量の値が共に０の場合には、非数が発生する。非数が発生した場合には、図３に示すように、テンポラリ変数ｔ＿ＡＢＹＦに記憶したバックアップ値を変数ＡＢＹＦに格納して変数ＡＢＹＦの値を更新する（ステップＳＴ６）。
一方、ステップＳＴ５において、非数が発生しない場合には、演算結果である空燃比の値を変数ＡＢＹＦに格納して変数ＡＢＹＦの値を更新する（ステップＳＴ７）。
【００１９】
次いで、テンポラリ変数ｔ＿ＡＢＹＦの値を消去する（ステップＳＴ８）。このとき、非数の発生の有無に関わらず、テンポラリ変数ｔ＿ＡＢＹＦの値を消去してもよいが、処理負担軽減の観点からは、非数の発生した場合にのみテンポラリ変数ｔ＿ＡＢＹＦの値を消去するのが好ましい。非数の伝播を防止できれば十分だからである。
【００２０】
以上のように、本実施例によれば、ＲＡＭ３０の所定アドレスに記憶される変数の値は、非数の発生した演算結果で更新されずに、バックアップ値で更新されるため、非数が発生する前後の演算結果が大きく食い違うことがない。また、演算実行後、非数チェックが終了するまでの一時的な期間のみ変数をテンポラリ領域にバックアップする構成としているので、各変数についてそれぞれ所定アドレスのバックアップ領域をもつ必要がなく、ＲＡＭの使用容量の増加を抑制できる。
【００２１】
図４は上記の演算処理装置におけるＲＡＭの使用方法の変形例を説明するための図である。
図４に示すＲＡＭ３０は、変数を記憶する変数領域、バックアップ専用領域、各種関数の演算時に作業領域として使用されるテンポラリ領域等から構成されている。
この変形例では、所定アドレスに記憶される変数の値をテンポラリ領域にバックアップするのではなく、バックアップ専用領域にバックアップすると共に、全ての変数のバックアップ処理においてこのバックアップ専用領域を共通に使用する。
このようなＲＡＭ３０の使用方法によれば、バックアップに必要なＲＡＭ３０の容量の増加を最小限に抑制できる。
【００２２】
図５は本発明が適用された関数の構成例を示す図である。
図５において、バックアップ処理は、図２のステップＳＴ１で説明した処理であり、非数チェック処理は図２のステップＳＴ５〜ＳＴ８の処理である。尚、図５に示す関数Ａは、図１に示した演算処理装置により演算される。
この関数Ａでは、非数チェック処理を関数Ａ内の全ての演算（処理）を実行した後に一括して実行する。これにより、非数チェック処理の回数を減らすことができて、処理負担を軽減できる。
【００２３】
図６は本発明が適用された関数の他の構成例を示す図である。
図６に示す関数Ｂでは、非数チェック処理を関数Ｂ内の演算（処理）毎に実行する。
これによれば、非数の発生を検出した直後にバックアップ値により変数を更新できるので、非数の伝播をより確実に防止できる。
【００２４】
図７は本発明が適用された関数のさらに他の構成例を示す図である。
図７に示す関数Ｃでは、関数Ｃ内の演算のうち、非数が発生しない演算については非数チェック処理を実行せず、非数が発生する可能性のある演算（処理）についてのみ選択的に実行する。
これによれば、非数の発生の可能性がない、あるいは、少ない演算については非数チェックを省略できるので、処理負担を軽減できる。
【実施例２】
【００２５】
図８及び図９は本発明の実施例２を示す図であって、図８はＲＡＭの使用方法の一例を説明するための図、図９は演算処理装置における演算処理方法の一例を示すフローチャートである。
この演算処理装置は、図９に示すように、先ず、図８に示すＲＡＭ３０の変数領域に記憶された変数１及び変数２をテンポラリ領域に一時的にバックアップする（ステップＳＴ１１）。尚、変数１は後述する演算１における変数であり、変数２は後述する演算２における変数である。
【００２６】
次いで、演算１を実行したのち（ステップＳＴ１２）、上記実施例１と同様に非数チェック処理を実行する（ステップＳＴ１３〜ＳＴ１５）。
次いで、演算２を実行し（ステップＳＴ１６）、非数の発生の有無を判断し（ステップＳＴ１７）、非数が発生していない場合には、上記実施例１と同様の処理を実行する（ステップＳＴ２２、ＳＴ２３）。
一方、非数が発生している場合には、非数発生回数をカウントアップし（ステップＳＴ１８）、非数発生回数が所定回数以上かを判断する（ステップＳＴ１９）。すなわち、この関数の実行毎に非数が発生していると、カウンタの値は増加していき、この値が所定回数以上となった場合には、変数１及び変数２をそれぞれバックアップ値で更新する（ステップＳＴ２０）。所定回数に達していない場合には、上記実施例１と同様の処理を実行する（ステップＳＴ２１、ＳＴ２３）。
【００２７】
このように、非数の発生が検出された演算２における変数２と共に、演算２より前の演算１における変数１の値をバックアップ値で共に更新することにより、非数の発生が検出された際に、その発生原因がその演算２以前の演算１にある場合に、演算２より前の演算１における変数１の値をバックアップ値で更新することにより、非数の発生が繰り返されることを防止できる。
また、演算２の非数の発生回数をカウントし、その発生回数に応じて演算２より前の演算１における変数１の値を更新することにより、非数の発生回数が多い場合だけ変数１及び変数２を強制的にバックアップ値で更新することにより、非数の発生頻度の低い演算の変数の値を自然に正常値に復帰させるこいとができる。
【実施例３】
【００２８】
図１０は実施例３に係る演算処理装置における演算処理方法を示すフローチャートである。
本例に係る演算処理装置は、上記実施例と同様に、バックアップ処理（ステップＳＴ３１）、演算実行（ステップＳＴ３２）、非数発生のチェック（ステップＳＴ３３）を実行したのち、非数が発生した場合には、その発生回数をカウントアップし（ステップＳＴ３４）、非数発生回数が所定回数以上かを判断する（ステップＳＴ３５）。そして、非数発生回数が所定回数以上の場合には、ＲＡＭ３０とは異なる図示しない他のメモリ（ＳＲＡＭ，ＥＥＰＲＯＭ，ＮＲＡＭ等）に、非数発生回数、非数が発生した変数のアドレス等からなる、非数の発生が検出された演算に関する情報を保存する。この情報は、ＲＯＭ２０の制御プログラムにバグ等が存在する場合に、これを修正するための有用な情報として使用できる。
【００２９】
上記実施形態では、本発明をエンジン制御に適用する場合について説明したが、これに限定されるわけではなく、各種電気機器等の制御にも適用可能である。
【００３０】
上記実施形態では、非数の発生し得る演算として浮動小数点演算を例に挙げて説明したが、これに限定されるわけではなく、非数の発生し得る演算を含む関数であれば本発明を適用できる。
【図面の簡単な説明】
【００３１】
【図１】本発明の実施例１に係る演算処理装置の構成図である。
【図２】演算処理装置における演算処理の一例を示すフローチャートである。
【図３】演算処理装置におけるＲＡＭの使用方法の一例を説明するための図である。
【図４】演算処理装置におけるＲＡＭの使用方法の他の例を説明するための図である。
【図５】本発明が適用された関数の構成例を示す図である。
【図６】本発明が適用された関数の他の構成例を示す図である。
【図７】本発明が適用された関数のさらに他の構成例を示す図である。
【図８】本発明の実施例２に係る演算処理装置におけるＲＡＭの使用方法の一例を説明するための図である。
【図９】本発明の実施例２に係る演算処理装置における演算処理方法の一例を示すフローチャートである。
【図１０】本発明の実施例３に係る演算処理方法のフローチャートである。
【符号の説明】
【００３２】
１０…プロセッサ（バックアップ手段、非数チェック処理手段）
２０…ＲＯＭ（バックアップ手段、非数チェック処理手段）
３０…ＲＡＭ（記憶装置）
４０…Ｉ／Ｏ
１００…エンジン
【図１】
2007079649.tif 000003
【図２】
2007079649.tif 000004
【図３】
2007079649.tif 000005
【図４】
2007079649.tif 000006
【図５】
2007079649.tif 000007
【図６】
2007079649.tif 000008
【図７】
2007079649.tif 000009
【図８】
2007079649.tif 000010
【図９】
2007079649.tif 000011
【図１０】
2007079649.tif 000012