JP2017123119A - 電子制御装置 - Google Patents

電子制御装置 Download PDF

Info

Publication number
JP2017123119A
JP2017123119A JP2016002896A JP2016002896A JP2017123119A JP 2017123119 A JP2017123119 A JP 2017123119A JP 2016002896 A JP2016002896 A JP 2016002896A JP 2016002896 A JP2016002896 A JP 2016002896A JP 2017123119 A JP2017123119 A JP 2017123119A
Authority
JP
Japan
Prior art keywords
cpu
reference address
stored
stack
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2016002896A
Other languages
English (en)
Inventor
ギョウコン 応
Yaokun Ying
ギョウコン 応
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Priority to JP2016002896A priority Critical patent/JP2017123119A/ja
Publication of JP2017123119A publication Critical patent/JP2017123119A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】スタックポインタに記憶された参照アドレスの異常を判定可能な電子制御装置を提供する。【解決手段】CPU、ROM、および、RAMを有する電子制御装置であって、CPUには、演算処理の実行途中の演算データを記憶する演算レジスタとスタック領域の参照アドレスが記憶されたスタックポインタが含まれ、RAMには、サブ関数コール若しくは割り込み関数の発生時において、演算データを一時的に退避させるスタック領域と参照アドレスを一時的に記憶する複数のバックアップ領域が含まれている。CPUはスタックポインタに記憶された参照アドレス、および、複数のバックアップ領域それぞれに記憶された参照アドレスそれぞれを比較することで、スタックポインタに記憶された参照アドレスの異常判定を行う。【選択図】図8

Description

本発明は、CPU、ROM、および、RAMを有する電子制御装置に関するものである。
特許文献1に示されるように、CPU等を備える制御部が知られている。CPUは、処理部、スタックポインタ、および、スタック領域を備える。スタック領域は、処理部がプログラムを実行する際などに利用する記憶領域である。スタックポインタは、スタック領域のアクセスするアドレスを指定するポインタである。スタックポインタの指定するアドレス値(以下、参照アドレスと示す)は、スタック領域のアドレスの下限値と上限値との間の値をとる。
処理部は、参照アドレスがスタック領域のアドレスの上限値と下限値との間の範囲にあるか否かを判定する。参照アドレスが上限値と下限値との間の範囲以外を指定している場合、処理部はスタックポインタ又はスタック領域に何らかの異常が発生していると判定する。
特開2007−79839号公報
上記したように特許文献1に示される処理部は、参照アドレスがスタック領域のアドレスの上限値と下限値との間の範囲にあるか否かを判定することで、スタックポインタ又はスタック領域に何らかの異常が発生しているか否かを判定する。しかしながら、ノイズなどのために参照アドレスがスタック領域のアドレスの上限値と下限値との間の範囲において変化することも起こり得る。このような場合、参照アドレスが変化しているために処理部がスタック領域のアクセルするアドレスが変化し、それによって処理部の動作が異常となる虞がある。上記したように特許文献1に示される処理部は、参照アドレスがスタック領域のアドレスの上限値と下限値との間の範囲にあるか否かを判定する。そのため特許文献1の処理部では上記した参照アドレスの異常を判定することが適わなかった。
そこで本発明は上記問題点に鑑み、スタックポインタに記憶された参照アドレスの異常を判定可能な電子制御装置を提供することを目的とする。
上記した目的を達成するための開示された発明の1つは、演算処理を実行するCPU(10)と、
演算処理を実行するための実行プログラムの記憶されたROM(20)と、
演算処理にて算出された算出データを記憶するRAM(30)と、を有する電子制御装置であって、
CPUには、演算処理の実行途中の演算データを記憶する演算レジスタ(11,12)が含まれ、
RAMには、サブ関数コール若しくは割り込み関数の発生時において、演算データを一時的に退避させるスタック領域(34)が含まれ、
CPUには演算レジスタの他に、スタック領域の参照アドレスを記憶するスタックポインタ(13)が含まれ、
RAMにはスタック領域の他に、参照アドレスを一時的に記憶する複数のバックアップ領域(35,36)が含まれており、
CPUはスタックポインタに記憶された参照アドレス、および、複数のバックアップ領域それぞれに記憶された参照アドレスそれぞれを比較することで、スタックポインタに記憶された参照アドレスの異常判定を行う。
これによればスタックポインタ(13)に記憶された参照アドレスにノイズなどによって異常が生じた場合においても、その異常を判定することができる。
なお、特許請求の範囲に記載の請求項、および、課題を解決するための手段それぞれに記載の要素に括弧付きで符号をつけている。この括弧付きの符号は実施形態に記載の各構成要素との対応関係を簡易的に示すためのものであり、実施形態に記載の要素そのものを必ずしも示しているわけではない。括弧付きの符号の記載は、いたずらに特許請求の範囲を狭めるものではない。
電子制御装置の概略構成を示すブロック図である。 RAMの記憶領域を説明するための模式図である。 スタック領域に記憶される関数Aの演算データを示す模式図である。 第1スタックバックアップ領域に記憶される関数Aの演算データと参照アドレス、および、識別子を示す模式図である。 関数Aの実行中において関数Bの割り込みがあった際のCPUの処理動作を説明するためのタイミングチャートである。 異常カウンタ、正常カウンタ、および、異常フラグの挙動を説明するためのタイミングチャートである。 サブ関数コール若しくは割り込み関数の発生時のCPUの処理動作を説明するためのフローチャートである。 CPUのデータ診断を詳説するためのフローチャートである。 スタック領域に記憶される演算データの一般的な状態を示す模式図である。 第1スタックバックアップ領域に記憶される演算データと参照アドレス、および、識別子の一般的な状態を示す模式図である。 関数Aの実行中において関数Bと関数Cの割り込みがあった際のCPUの処理動作を説明するためのタイミングチャートである。
以下、本発明に係る電子制御装置を自動車のエンジンECUに適用した場合の実施形態を図に基づいて説明する。
(第1実施形態)
図1〜図8に基づいて本実施形態に係る電子制御装置を説明する。なお図5に示すCPU10の各処理の実行時間は、実際に要する処理の実行時間を反映していない。例えば図5ではデータの退避とバックアップを最も長く表示しているが、実際にはこの処理に要する実行時間は関数Bの実行時間よりも短い。
電子制御装置100はエンジン自動車やハイブリッド自動車に搭載されるエンジンECUである。図1に示すように電子制御装置100は、バス配線300を介して自動車に搭載された他の電子制御装置(外部電子制御装置200)と通信可能となっている。この外部電子制御装置200は、例えばバッテリECUやトランスミッションECUである。また電子制御装置100は自動車に搭載された燃圧センサや回転角センサなどの各種センサと電気的に接続されている。電子制御装置100は外部電子制御装置200との通信、および、燃圧センサや回転角センサなどから入力されるセンサ信号に基づいて、エンジンの燃料噴射量や燃料噴射タイミング、そしてプラグの点火タイミングなどを決定する。また電子制御装置100は所定周期で自己診断を行なったりもする。
図1に示すように電子制御装置100はマイクロコンピュータの構成要素としてCPU10、ROM20、RAM30、および、I/Oポート40を有する。CPU10はI/Oポート40を介してバス配線300と電気的に接続されている。またCPU10はROM20およびRAM30それぞれと電気的に接続されている。ROM20には演算処理を実行するための実行プログラムが記憶されている。RAM30には演算処理にて算出された算出データが記憶される。
CPU10には複数のレジスタが含まれている。これら複数のレジスタの代表として、図1にデータレジスタ11、プログラムカウンタ12、および、スタックポインタ13を示す。データレジスタ11はCPU10の演算処理の実行途中のデータ(以下、途中データと示す)を記憶する。プログラムカウンタ12は途中データの実行を開始するアドレス(以下、開始アドレスと示す)を記憶する。スタックポインタ13は後述のRAM30のスタック領域34で最後に参照した位置のアドレス(以下、参照アドレスと示す)を記憶する。途中データと開始アドレスが演算データに相当する。またデータレジスタ11とプログラムカウンタ12が演算レジスタに相当する。以下においては途中データと開始アドレスをまとめて演算データと表す。
図2に示すようにRAM30は、データ領域31,32、バックアップ領域33、スタック領域34、および、スタックバックアップ領域35,36を有する。図2に示すようにデータ領域31,32とスタックバックアップ領域35,36とが交互に並び、これらがスタック領域34を介してバックアップ領域33と並んでいる。データ領域31,32は算出データを記憶する。バックアップ領域33はイニシャル処理においてもクリアされない学習データを記憶している。スタック領域34は後述するようにサブ関数コールや割り込み関数の発生時に演算データを一時的に記憶する。スタックバックアップ領域35,36はサブ関数コールや割り込み関数の発生時に演算データと参照アドレスを一時的に記憶する。スタックバックアップ領域35,36が複数のバックアップ領域に相当する。
図3に示すようにスタック領域34は後入れ先出し(Last In First Out)の記憶領域である。CPU10はスタック領域34に先ず演算データのうちの開始アドレスを記憶する。その後にCPU10は途中データ1〜nをスタック領域34に順次記憶する。これは演算データをスタック領域34に一時的に退避させる際の記憶順番である。これとは逆にスタック領域34から演算データを復帰させる場合、CPU10は途中データn〜1を順次読み出し、最後に開始アドレスを読み出す。なお図3ではスタック領域34の未使用領域にハッチングを付与している。
図4に示すように第1スタックバックアップ領域35は、スタック領域34と同様にして後入れ先出しの記憶領域である。CPU10は第1スタックバックアップ領域35に先ず演算データのうちの開始アドレスを記憶する。その後にCPU10は途中データ1〜nを第1スタックバックアップ領域35に順次記憶する。そしてCPU10は最後に参照アドレスを第1スタックバックアップ領域35に記憶する。これは演算データと参照アドレスを第1スタックバックアップ領域35に一時的に退避させる際の記憶順番である。これとは逆に第1スタックバックアップ領域35から演算データと参照アドレスを復帰させる場合、CPU10は先ず参照アドレスを読み出す。その後にCPU10は第1スタックバックアップ領域35から途中データn〜1を順次読み出し、最後に開始アドレスを読み出す。これらデータの退避と復帰に関しては第2スタックバックアップ領域36においても同様である。
図4に示すように第1スタックバックアップ領域35には、演算データと参照アドレスとを識別するための識別子も記憶される。演算データにはDataの識別子が付与される。参照アドレスにはPointerの識別子が付与される。なお図4では第1スタックバックアップ領域35の未使用領域にハッチングを付与している。この未使用領域の識別子にはDummyが付与される。これら識別子の付与は第2スタックバックアップ領域36においても同様である。
次に図5に基づいてCPU10の演算処理動作を概説する。図5の始まりにおいてCPU10は関数Aの演算処理を実行している。この際にCPU10は演算データをデータレジスタ11とプログラムカウンタ12に記憶する。またCPU10は算出データをRAM30のデータ領域31,32に記憶する。関数Aの演算処理は、例えばエンジン制御にかかわるものである。
時間t1に至ると関数Bの割り込みが発生する。関数Bの演算処理は、例えば所定周期で実施される自己診断などである。この場合にCPU10はデータレジスタ11とプログラムカウンタ12に記憶された演算データを一時的にスタック領域34に退避させる。この際にスタックポインタ13のスタック領域34を指すアドレスが順次変動する。そしてスタックポインタ13の指すアドレスは、図3で言えば、最終的にデータnの記憶されたアドレスを指す。このアドレスが参照アドレスとしてスタックポインタ13に記憶される。CPU10はこの参照アドレスと演算データを一時的にスタックバックアップ領域35,36にバックアップする。
なおCPU10が関数Aの演算処理を実行している際にサブ関数をコールする場合がある。この場合においてもCPU10は演算データを一時的にスタック領域34に退避させる。この際に参照アドレスがスタックポインタ13に記憶される。CPU10は参照アドレスと演算データを一時的にスタックバックアップ領域35,36にバックアップする。以下においては煩雑となることを避けるため、サブ関数コールと割り込み関数の発生のうち、割り込み関数の発生のみを記載する。
時間t2に至って演算データと参照アドレスの退避とバックアップが終了するとCPU10は関数Bの演算処理を実行し始める。
そして時間t3に至って関数Bの演算処理が終了するとCPU10はスタックポインタ13に記憶された参照アドレスとバックアップ領域35,36に記憶された参照アドレスそれぞれとを比較する。これら3つの参照アドレスの全てが一致する場合、CPU10は参照アドレスと演算データは正常であると判定する。CPU10は正常カウンタを保有している。この場合にCPU10は正常カウンタを1だけインクリメントする。またCPU10は異常カウンタを保有している。CPU10は正常カウンタが所定値αに達するとこの異常カウンタを1だけディクリメントする。そしてCPU10は正常カウンタをクリアする。本実施形態では上記の所定値αとして3を採用している。ただし所定値αの値としては3に限定されず、2以上の数であればよい。例えば所定値αとして4を採用することもできる。
これとは異なり3つの参照アドレスのうちの一部(2つ)が一致する場合、CPU10は参照アドレス若しくは演算データに異常が生じていると判定する。CPU10は異常カウンタを1だけインクリメントする。またCPU10は正常カウンタをクリアする。そしてCPU10は3つの参照アドレスのうち、一致する2つの参照アドレスにスタックポインタ13に記憶された参照アドレスが含まれているか否かを判定する。一致する2つの参照アドレスにスタックポインタ13に記憶された参照アドレスが含まれていない場合、CPU10は一致する参照アドレスでスタックポインタ13の参照アドレスを補正する。すなわちCPU10はスタックバックアップ領域35,36の参照アドレスでスタックポインタ13の参照アドレスを補正する。
またスタックポインタ13の参照アドレスを補正する場合、CPU10はスタック領域34の演算データの補正も行う。スタック領域34とスタックバックアップ領域35,36には同一種類の3つの演算データが記憶されている。それは図3および図4で言えば、例えば開始アドレスやデータnである。CPU10はこれら同一種類の3つの演算データを比較する。CPU10は同一種類の3つの演算データのうち、一致する2つの演算データにスタック領域34に記憶された演算データが含まれているか否かを判定する。一致する2つの演算データにスタック領域34に記憶された演算データが含まれていない場合、CPU10は一致する演算データでスタック領域34の演算データを補正する。すなわちCPU10はスタックバックアップ領域35,36の演算データでスタック領域34の演算データを補正する。
後で説明するようにこのような異常が連続して所定回数βだけ起こるとCPU10はスタックポインタ13若しくはスタック領域34に異常が生じていると判定する。そしてCPU10は保有している異常フラグをオンにする。またCPU10はMILランプなどの警告を示す自動車に搭載のインジケータを点灯する。本実施形態では上記の所定回数βとして3を採用している。ただし所定回数βの値としては3に限定されず、2以上の数であればよい。例えば所定回数βとして5を採用することもできる。所定回数βは第1所定回数に相当する。
なおスタックポインタ13とスタック領域34それぞれの異常を独立して判定するためにCPU10は、スタックポインタ13に対応する所定回数β1とスタック領域34に対応する所定回数β2を保有していてもよい。これら2つの所定回数β1,β2の値は互いに異なる。
3つの参照アドレスの全てが不一致の場合、CPU10は関数Aへの復帰が適わないと判定する。また上記したようにスタック領域34の演算データを補正するべく、同一種類の3つの演算データを比較した結果、3つの演算データの全てが一致しない場合においても、CPU10は関数Aへの復帰が適わないと判定する。そこでCPU10は電子制御装置100のマイクロコンピュータ(マイコン)をリセット処理する。
時間t4に至り、データ診断の結果、スタックポインタ13の参照アドレスが正常の場合、若しくは、参照アドレスと演算データを補正することができた場合、CPU10は関数Aを復帰させる。
そして時間t5に至り関数Aの復帰が終了するとCPU10は関数Aの演算処理を再開する。
次に、図6に基づいて上記した正常カウンタ、異常カウンタ、および、異常フラグを説明する。図6は上記のデータ診断を行った結果、正常カウンタ、異常カウンタ、および、異常フラグがどのように挙動するのかを例示している。
なお図6においてはカウンタや異常フラグの説明を簡明とするため、データ診断の結果は、3つの参照アドレスが全て一致する場合、および、3つの参照アドレスのうちの2つが一致する場合のみを示している。また以下においてはデータ診断の結果の表記を簡明とするため、3つの参照アドレスが全て一致する場合を正常、3つの参照アドレスのうちの2つが一致する場合を異常と示す。3つの参照アドレスの全てが不一致の場合、CPU10は異常カウンタ、正常カウンタ、および、異常フラグをクリアする。
図6の始まりにおいてCPU10は演算処理を実行しており、割り込み関数の発生は起きていない。しかしながら時間t1に至ると割り込み関数が発生する。この際にCPU10はデータの退避とバックアップを実行する。そしてCPU10は割り込み関数の演算処理を実行した後に退避したデータの診断を行う。この際のデータ診断の結果が異常となると、図6に示すようにCPU10は異常カウンタを1だけインクリメントする。
その後時間t2に至って再度割り込みが発生するとCPU10はデータ診断する。そのデータ診断の結果が正常となると、図6に示すようにCPU10は正常カウンタを1だけインクリメントする。その後に再度データ診断を繰り返した結果、時間t3に至って正常判定が連続して所定値α(3)に達するとCPU10は異常カウンタを1だけディクリメントし、そのカウント値を0にする。またCPU10は正常カウンタを0にクリアする。
時間t4に至って再度割り込みが発生し、データ診断を繰り返した結果、正常判定が連続するとやがて正常カウンタのカウント値は上限値4に達する。この後にデータ診断の結果が正常となっても正常カウンタのカウント値は上限値4に固定される。なおもちろんではあるが正常カウンタの上限値は4でなくともよい。上限値は所定値α以上の自然数であればよい。
時間t5に至って再度割り込みが発生し、データ診断の結果が異常の場合、CPU10は異常カウンタを1だけインクリメントする。またCPU10は正常カウンタを0にクリアする。その後に再度データ診断を繰り返した結果、時間t6に至って異常判定が連続して所定回数β(3)に達するとCPU10は異常フラグをオフからオンにする。そしてCPU10はインジケータを点灯する。
また時間t7に至って再度割り込みが発生し、データ診断を行った結果、異常判定となると異常カウンタのカウント値が上限値4に達する。この後にデータ診断の結果が異常となっても異常カウンタのカウント値は上限値4に固定される。なおもちろんではあるが異常カウンタの上限値は4でなくともよい。上限値は所定回数β以上の自然数であればよい。
その後時間t8に至って割り込みが発生したためにデータ診断をした結果が正常になると、CPU10は正常カウンタを1だけインクリメントする。その後に再度データ診断を繰り返した結果正常判定が連続し、時間t9に至って正常カウンタが3に達すると、CPU10は異常カウンタを1だけディクリメントし、そのカウント値を3にする。またCPU10は正常カウンタを0にクリアする。
以下同様にして、再度データ診断を繰り返した結果正常判定が連続し、時間t10に至って正常カウンタが3に達すると、CPU10は異常カウンタを1だけディクリメントし、そのカウント値を2にする。またCPU10は正常カウンタを0にクリアする。
時間t11に至って正常カウンタが3に達すると、CPU10は異常カウンタを1だけディクリメントし、そのカウント値を1にする。またCPU10は正常カウンタを0にクリアする。
時間t12に至って正常カウンタが3に達すると、CPU10は異常カウンタを1だけディクリメントし、そのカウント値を0にする。またCPU10は正常カウンタを0にクリアする。そしてCPU10は異常フラグをオンからオフにし、インジケータを消灯する。
次に図7に基づいて、CPU10がサブ関数コール若しくは割り込み発生時に行う処理を説明する。以下においてはCPU10が関数Aの演算処理を実行している際に関数Bの割り込みが発生した場合のCPU10の処理動作を説明する。
先ずステップS10においてCPU10は関数Aの演算データをスタック領域34に退避させる。この際にスタックポインタ13に参照アドレスが記憶される。その後にCPU10はステップS20へと進む。
ステップS20へ進むとCPU10は演算データと参照アドレスをスタックバックアップ領域35,36にバックアップする。その後にCPU10はステップS30へと進む。
ステップS30へ進むとCPU10は関数Bの演算処理を実行する。その後にCPU10はステップS40へと進む。
ステップS40へ進むとCPU10は関数Bの演算処理が終了したか否かを判定する。関数Bの演算処理が終了した場合にCPU10はステップS50へと進む。これとは異なり関数Bの演算処理が終了していない場合にCPU10は再度ステップS40へと戻る。このようにCPU10は関数Bの演算処理が終了するまでステップS40を繰り返す。
なお関数Bの演算処理を実行している最中に他の例えば関数Cなどの割り込みが発生する場合がある。この場合にCPU10はステップS10〜S30を実行して関数Bの演算データと参照アドレスの退避とバックアップを実行する。そしてCPU10は関数Cの演算処理を実行する。
ステップS50へ進むとCPU10はデータ診断を実施する。そのデータ診断の結果、関数Aのデータ復帰が可能か否かをCPU10は判断する。関数Aのデータ復帰が可能の場合にCPU10はステップS60へと進む。これとは異なり関数Aのデータ復帰が不可能の場合にCPU10は関数Aの演算処理を終了する。詳しく言えば、後で図8に基づいて説明するようにCPU10は電子制御装置100のマイコンをリセット処理する。
ステップS60へ進むとCPU10はスタック領域34に退避している演算データをスタックポインタ13に記憶している参照アドレスに基づいて復帰させる。その後にCPU10はステップS70へと進む。
ステップS70へ進むとCPU10は関数Aの演算処理を再び実行し始める。そしてCPU10はサブ関数コール若しくは割り込み発生時の処理を終了する。
次に図8に基づいて図7に示すステップS50のデータ診断を詳説する。
先ずステップS110においてCPU10は退避データと複数のバックアップデータそれぞれを比較する。すなわちCPU10はスタックポインタ13に退避された参照アドレスとスタックバックアップ領域35,36にバックアップした参照アドレスとを比較する。この後にCPU10はステップS120へと進む。
ステップS120へ進むとCPU10は退避データと複数のバックアップデータが全て一致するか否かを判定する。すなわちCPU10は3つの参照アドレスが全て一致するか否かを判定する。3つの参照アドレスが全て一致する場合、CPU10は参照アドレスと演算データは正常であると判定して、ステップS130へと進む。これとは異なり3つの参照アドレスの全てが一致しない場合、CPU10は参照アドレスと演算データは異常であると判定して、ステップS140へと進む。
ステップS130へ進むとCPU10は正常カウンタを1だけインクリメントする。この後にCPU10はステップS150へと進む。なお正常カウンタが上限値に達している場合、正常カウンタのカウント値は上限値に保たれる。
ステップS150へ進むとCPU10は正常カウンタのカウント値が所定値αであるか否かを判定する。正常カウンタのカウント値が所定値αである場合、CPU10はステップS160へと進む。これとは異なり正常カウンタのカウント値が所定値αでない場合、CPU10はステップS60へと進む。
ステップS160へ進むとCPU10は異常カウンタのカウント値は0であるか否かを判定する。異常カウンタのカウント値が0である場合、CPU10はステップS60へと進む。これとは異なり異常カウンタのカウント値が0でない場合、CPU10はステップS170へと進む。
ステップS60へ進むとCPU10は、上記したように関数Aを復帰する。そしてCPU10はステップS70へ進んで関数Aの演算処理を再び実行する。
ステップS170へ進むとCPU10は異常カウンタを1だけディクリメントする。この後にCPU10はステップS180へと進む。
ステップS180へ進むとCPU10は正常カウンタをαから0にクリアする。この後にCPU10はステップS190へと進む。
ステップS190へ進むとCPU10は異常カウンタのカウント値は0であるか否かを判定する。異常カウンタのカウント値が0である場合、CPU10はステップS200へと進む。これとは異なり異常カウンタのカウント値が0でない場合、CPU10はステップS60へと進む。
ステップS200へ進むとCPU10は異常フラグがオンであるか否かを判定する。異常フラグがオンである場合、CPU10はステップS210へと進む。これとは異なり異常フラグがオフである場合、CPU10はステップS60へと進む。
ステップS210へ進むとCPU10は異常フラグをオンからオフにする。そしてCPU10はインジケータを消灯する。この後にCPU10はステップS60へと進む。
フローを遡りステップS120において3つの参照アドレスが全て一致しないと判定してステップS140へ進むとCPU10は、3つの参照アドレスのうちの一部(2つ)が一致するか否かを判定する。3つの参照アドレスのうちの一部が一致する場合、CPU10はステップS220へと進む。これとは異なり3つの参照アドレスの全てが不一致の場合、CPU10はステップS230へと進む。
ステップS220へ進むとCPU10は異常カウンタを1だけインクリメントする。この後にCPU10はステップS240へと進む。なお異常カウンタが上限値に達している場合、異常カウンタのカウント値は上限値に保たれる。
ステップS240へ進むとCPU10は正常カウンタを0にクリアする。この後にCPU10はステップS250へと進む。
ステップS250へ進むとCPU10は異常カウンタのカウント値が所定回数β以上であるか否かを判定する。異常カウンタのカウント値が所定回数β以上である場合、CPU10はステップS260へと進む。これとは異なり異常カウンタのカウント値が所定回数β未満の場合、CPU10はステップS270へと進む。
ステップS260へ進むとCPU10は異常フラグをオンにする。そしてCPU10はインジケータを点灯する。この後にCPU10はステップS280へと進む。
ステップS270へ進むとCPU10は異常フラグをオフにする。そしてCPU10はインジケータを消灯する。この後にCPU10はステップS280へと進む。
ステップS280へ進むとCPU10はステップS140において一致すると判定した参照アドレスにスタックポインタ13に記憶された参照アドレスが含まれているか否かを判定する。一致すると判定した参照アドレスにスタックポインタ13の参照アドレスが含まれている場合、CPU10はデータの補正を実行せずにステップS60へと進む。これとは異なり一致すると判定した参照アドレスにスタックポインタ13の参照アドレスが含まれていない場合、CPU10は一致する参照アドレスでスタックポインタ13の参照アドレスを補正する。すなわちCPU10はスタックバックアップ領域35,36の参照アドレスでスタックポインタ13の参照アドレスを補正する。またCPU10は、スタック領域34の演算データをスタックバックアップ領域35,36の演算データに基づいて補正する。ただし3つの演算データの全てが不一致のためにデータの補正が適わない場合、図8に示すフローチャートでは明示していないが、CPU10は電子制御装置100のマイコンをリセット処理する。
フローを遡りステップS140において3つの参照アドレスの全てが不一致と判定してステップS230へ進むとCPU10は、電子制御装置100のマイコンをリセット処理する。
次に、本実施形態に係る電子制御装置100の作用効果を説明する。上記したようにCPU10はスタックポインタ13に記憶された参照アドレス、および、スタックバックアップ領域35,36それぞれに記憶された参照アドレスそれぞれを比較することで、スタックポインタ13に記憶された参照アドレスの異常判定を行う。これによればスタックポインタ13に記憶された参照アドレスにノイズなどによって異常が生じた場合においても、その異常を判定することができる。
CPU10はスタックバックアップ領域35,36の参照アドレスが一致するが、スタックポインタ13の参照アドレスがそれとは異なると判定すると、スタックポインタ13の参照アドレスをスタックバックアップ領域35,36の参照アドレスで補正する。これによればスタックポインタ13に記憶された参照アドレスに異常が生じたとしても、その異常を補正することができる。
参照アドレスの異常判定が連続して所定回数βだけ起こるとCPU10はスタックポインタ13若しくはスタック領域34に異常が生じていると判定する。これによればスタックポインタに記憶された参照アドレスが1度だけ異常と判定されると即座にスタックポインタ若しくはスタック領域が異常であると判定する構成と比べて、スタックポインタ13とスタック領域34の異常判定のロバスト性が向上される。
スタックポインタ13の参照アドレスを補正する場合、CPU10はスタック領域34の演算データの補正をスタックバックアップ領域35,36の演算データに基づいて行う。
これによればスタック領域34に記憶された演算データに異常が生じたとしても、その異常を補正することができる。
スタックバックアップ領域35,36はスタック領域34と同様にして後入れ先出しで記憶される構成となっている。そしてスタックバックアップ領域35,36には、演算データと参照アドレスとを区別するための識別子も記憶される。
これによれば識別子がスタックバックアップ領域に記憶されない構成とは異なり、識別子を参照することで、参照アドレスや演算データをスタックバックアップ領域35,36から容易に読み出すことができる。また種類の異なる関数の演算データがスタックバックアップ領域35,36に記憶されたとしても、スタックバックアップ領域35,36における各演算データの記憶領域が参照アドレスによって区画される。
以上、本発明の好ましい実施形態について説明したが、本発明は上記した実施形態になんら制限されることなく、本発明の主旨を逸脱しない範囲において、種々変形して実施することが可能である。
(第1の変形例)
本実施形態ではCPU10は図8に示すステップS110においてスタックポインタ13の参照アドレスとスタックバックアップ領域35,36の参照アドレスとを比較する例を示した。しかしながらCPU10はステップS110においてスタック領域34の演算データとスタックバックアップ領域35,36の演算データも比較してもよい。
なおこの変形例の場合、CPU10は異常カウンタとして、参照アドレスに対応する第1カウンタと演算データに対応する第2カウンタとを有してもよい。第1カウンタのカウント値はスタックポインタ13の参照アドレスに異常が生じていると判定した場合にインクリメントされる。第2カウンタのカウント値はスタック領域34の演算データに異常が生じていると判定した場合にインクリメントされる。そしてCPU10は第1カウンタのカウント値が所定回数βに達するとスタックポインタ13に異常が生じていると判定する。またCPU10は第2カウンタのカウント値が所定回数γに達するとスタック領域34に異常が生じていると判定する。これによればスタックポインタ13に異常が生じているのか、それともスタック領域34に異常が生じているのかを独立して判定することができる。すなわちCPU10のレジスタに異常が生じているのか、それともRAM30に異常が生じているのかを独立して判定することができる。所定回数γは2以上の自然数であり、第2所定回数に相当する。
(第2の変形例)
第1の変形例では図8に示すステップS110において参照アドレスと演算データそれぞれの比較判定を行う例を示した。この際、参照アドレスだけの比較を行うのか、それとも参照アドレスだけではなく演算データの比較も行うのかは、自動車の運転状況とCPU10の処理負荷によって定まる演算処理状況、および、退避した関数Aの重要度の少なくとも一方によって決定してもよい。具体的に言えば、例えば自動車が高速走行しているために演算処理状況が厳しい場合、退避した関数Aの重要度によらずに、CPU10は参照アドレスだけの比較を行ってもよい。また自動車が低速走行しているために演算処理状況が優しい場合、退避した関数Aの重要度によって、CPU10は参照アドレスだけの比較を行うのか、それとも参照アドレスと演算データそれぞれの比較を行うのかを決定してもよい。さらに例示すれば、CPU10は演算処理状況に応じずに関数Aの重要度のみによって参照アドレスだけの比較を行うのか、それとも参照アドレスと演算データそれぞれの比較を行うのかを決定してもよい。このような比較判定の対象の選択をCPU10は図8に示すステップS110の前に実施する。
これによればCPUが演算処理状況および演算データの重要度にかかわらずに参照アドレスと演算データの異常判定それぞれを実施する構成と比べて、CPU10の演算データの実行処理が遅れることが抑制される。またCPU10の処理負荷の増大が抑制される。
(第3の変形例)
本実施形態ではスタックバックアップ領域35,36に演算データと参照アドレスが記憶された例を示した。しかしながらスタックバックアップ領域35,36に参照アドレスだけが記憶された構成を採用することもできる。この変形例の場合、CPU10はスタックポインタ13の参照アドレスがスタックバックアップ領域35,36の参照アドレスと異なるとマイコンをリセット処理する。
(その他の変形例)
本実施形態では電子制御装置100がエンジンECUである例を示した。しかしながら電子制御装置100としては上記例に限定されず、例えばバッテリECUやトランスミッションECUを採用することもできる。
本実施形態では図2に示すようにRAM30がデータ領域31,32、バックアップ領域33、スタック領域34、および、スタックバックアップ領域35,36を有する例を示した。しかしながらこれらデータ領域、バックアップ領域、スタック領域、および、スタックバックアップ領域それぞれの数は上記例に限定されない。スタックバックアップ領域の数が複数であればよい。
本実施形態では図3に示すようにスタック領域34に関数Aの演算データのみが記憶された例を示した。しかしながら、当然ではあるがスタック領域34は複数の演算データを記憶することができる。例えば関数Pと関数Qとが連続して割り込み、その前にスタック領域34にデータが記憶されているとすると、スタック領域34の記憶状況は図9に示すようになる。すなわち関数Pの演算データがスタック領域34に記憶された後、関数Qの演算データがスタック領域34に記憶される。
また本実施形態では図4に示すように第1スタックバックアップ領域35に関数Aの演算データと参照アドレスのみが記憶された例を示した。しかしながら、当然ではあるが第1スタックバックアップ領域35は複数の演算データと参照アドレスを記憶することができる。例えば関数Pと関数Qとが連続して割り込み、その前に第1スタックバックアップ領域35にデータが記憶されているとすると、第1スタックバックアップ領域35の記憶状況は図10に示すようになる。すなわち関数Pの演算データと参照アドレスが第1スタックバックアップ領域35に記憶された後、関数Qの演算データと参照アドレスが第1スタックバックアップ領域35に記憶される。第2スタックバックアップ領域36においても第1スタックバックアップ領域35と同様にして複数の関数の演算データと参照アドレスとを記憶することができる。
本実施形態では主としてCPU10が関数Aの演算処理を実行している際に関数Bの割り込みが入った例を示した。しかしながら関数Bの演算処理を実行している際に、さらに関数Cの割り込みが発生することも起こり得る。その場合、CPU10は例えば図11に示す処理を実施する。すなわちCPU10は関数Aの演算処理を実行している際に時間t1において関数Bの割り込みが発生すると、関数Aの退避とバックアップを実行する。その後の時間t2においてCPU10は関数Bの演算処理を実行し始める。しかしながらこの関数Bの演算処理を実行している際に時間t3において関数Cの割り込みが発生すると、CPU10は関数Bの退避とバックアップを実行する。その後の時間t4〜t5にかけてCPU10は関数Cの演算処理を実行して終了すると、関数Bのデータ診断を行う。そして時間t6に至るとCPU10は関数Bのデータの復帰を実施し、時間t7において関数Bの演算処理を再度実行する。時間t8において関数Bの演算処理が終了すると、CPU10は関数Aのデータ診断を行う。そして時間t9に至るとCPU10は関数Aのデータの復帰を実施し、時間t10において関数Aの演算処理を再度実行する。
10…CPU
11…データレジスタ
12…プログラムカウンタ
13…スタックポインタ
20…ROM
30…RAM
34…スタック領域
35…第1スタックバックアップ領域
36…第2スタックバックアップ領域
100…電子制御装置

Claims (8)

  1. 演算処理を実行するCPU(10)と、
    前記演算処理を実行するための実行プログラムの記憶されたROM(20)と、
    前記演算処理にて算出された算出データを記憶するRAM(30)と、を有する電子制御装置であって、
    前記CPUには、前記演算処理の実行途中の演算データを記憶する演算レジスタ(11,12)が含まれ、
    前記RAMには、サブ関数コール若しくは割り込み関数の発生時において、前記演算データを一時的に退避させるスタック領域(34)が含まれ、
    前記CPUには前記演算レジスタの他に、前記スタック領域の参照アドレスを記憶するスタックポインタ(13)が含まれ、
    前記RAMには前記スタック領域の他に、前記参照アドレスを一時的に記憶する複数のバックアップ領域(35,36)が含まれており、
    前記CPUは前記スタックポインタに記憶された前記参照アドレス、および、複数の前記バックアップ領域それぞれに記憶された前記参照アドレスそれぞれを比較することで、前記スタックポインタに記憶された前記参照アドレスの異常判定を行う電子制御装置。
  2. 前記CPUは、前記参照アドレスの異常判定において、前記スタックポインタと複数の前記バックアップ領域それぞれに記憶された少なくとも3つの前記参照アドレスのうちの一部が一致し、且つ、前記スタックポインタに記憶された前記参照アドレスが一致と判定した前記参照アドレスと異なる場合、前記スタックポインタに記憶された前記参照アドレスを一致と判定した前記参照アドレスによって補正する請求項1に記載の電子制御装置。
  3. 第1所定回数を2以上の自然数とすると、
    前記CPUは、前記スタックポインタに記憶された前記参照アドレスが前記参照アドレスの異常判定において一致と判定した前記参照アドレスと異なることが前記第1所定回数だけ連続して起こった場合、前記スタックポインタが異常であると判定する請求項2に記載の電子制御装置。
  4. 複数の前記バックアップ領域それぞれには、前記参照アドレスだけではなく、前記演算データも記憶されており、
    前記CPUは、前記スタック領域に記憶された前記演算データと、複数の前記バックアップ領域それぞれに記憶された前記演算データそれぞれを比較することで、前記スタック領域に記憶された前記演算データの異常判定を行う請求項2または請求項3に記載の電子制御装置。
  5. 前記CPUは、前記演算データの異常判定において、前記スタック領域と複数の前記バックアップ領域それぞれに記憶された少なくとも3つの対応する前記演算データのうちの一部が一致し、且つ、前記スタック領域に記憶された前記演算データが一致と判定した前記演算データと異なる場合、前記スタック領域に記憶された前記演算データを一致と判定した前記演算データによって補正する請求項4に記載の電子制御装置。
  6. 第2所定回数を2以上の自然数とすると、
    前記CPUは、前記スタック領域に記憶された前記演算データが前記演算データの異常判定において一致と判定した前記演算データと異なることが前記第2所定回数だけ連続して起こった場合、前記スタック領域が異常であると判定する請求項4または請求項5に記載の電子制御装置。
  7. 前記バックアップ領域は前記演算データが後入れ先出しで記憶される構成となっており、
    前記バックアップ領域には、前記演算データが記憶された後に前記参照アドレスが記憶され、前記演算データと前記参照アドレスとを区別するための識別子も記憶される請求項4〜請求項6のいずれか1項に記載の電子制御装置。
  8. 前記CPUは、演算処理状況および前記演算データの重要度の少なくとも一方に応じて、前記スタックポインタに記憶された前記参照アドレスの異常判定、および、前記スタック領域に記憶された前記演算データの異常判定の実施を決定する請求項4〜7いずれか1項に記載の電子制御装置。
JP2016002896A 2016-01-08 2016-01-08 電子制御装置 Pending JP2017123119A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016002896A JP2017123119A (ja) 2016-01-08 2016-01-08 電子制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016002896A JP2017123119A (ja) 2016-01-08 2016-01-08 電子制御装置

Publications (1)

Publication Number Publication Date
JP2017123119A true JP2017123119A (ja) 2017-07-13

Family

ID=59305907

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016002896A Pending JP2017123119A (ja) 2016-01-08 2016-01-08 電子制御装置

Country Status (1)

Country Link
JP (1) JP2017123119A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108287509A (zh) * 2018-02-27 2018-07-17 上海瑞华(集团)有限公司 一种无人驾驶纯电动船的功能参数自动修整系统装置
US11947408B2 (en) 2020-03-27 2024-04-02 Panasonic Intellectual Property Management Co., Ltd. Anomaly detection method, anomaly detection recording medium, anomaly detection device, rewriting method, and rewriting device

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63223832A (ja) * 1987-03-12 1988-09-19 Sanyo Electric Co Ltd 知識ベ−ス処理装置
JP2004126932A (ja) * 2002-10-02 2004-04-22 Handotai Rikougaku Kenkyu Center:Kk 集積回路装置
WO2005024630A1 (ja) * 2003-09-04 2005-03-17 Science Park Corporation 不正コード実行の防止方法および防止プログラム
JP2010198147A (ja) * 2009-02-24 2010-09-09 Mitsubishi Heavy Ind Ltd コンピュータメモリにおけるスタック領域のデータの保護方法
JP2012224315A (ja) * 2011-04-22 2012-11-15 Denso Corp 車載電子制御装置、診断ツールおよび診断システム
JP2013120539A (ja) * 2011-12-08 2013-06-17 Denso Corp 電子制御装置、および、これを用いた電動パワーステアリング装置
JP2014035741A (ja) * 2012-08-10 2014-02-24 Denso Corp 電子制御装置
JP2015011436A (ja) * 2013-06-27 2015-01-19 株式会社デンソー プロセッサ
JP2015115052A (ja) * 2013-12-16 2015-06-22 日本電気株式会社 マイクロプロセッサ、コンピュータ、異常対応方法、及び異常対策プログラム

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63223832A (ja) * 1987-03-12 1988-09-19 Sanyo Electric Co Ltd 知識ベ−ス処理装置
JP2004126932A (ja) * 2002-10-02 2004-04-22 Handotai Rikougaku Kenkyu Center:Kk 集積回路装置
WO2005024630A1 (ja) * 2003-09-04 2005-03-17 Science Park Corporation 不正コード実行の防止方法および防止プログラム
JP2010198147A (ja) * 2009-02-24 2010-09-09 Mitsubishi Heavy Ind Ltd コンピュータメモリにおけるスタック領域のデータの保護方法
JP2012224315A (ja) * 2011-04-22 2012-11-15 Denso Corp 車載電子制御装置、診断ツールおよび診断システム
JP2013120539A (ja) * 2011-12-08 2013-06-17 Denso Corp 電子制御装置、および、これを用いた電動パワーステアリング装置
JP2014035741A (ja) * 2012-08-10 2014-02-24 Denso Corp 電子制御装置
JP2015011436A (ja) * 2013-06-27 2015-01-19 株式会社デンソー プロセッサ
JP2015115052A (ja) * 2013-12-16 2015-06-22 日本電気株式会社 マイクロプロセッサ、コンピュータ、異常対応方法、及び異常対策プログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
片峯恵一、外3名: "知識ベースシステム開発支援環境INSIDEと実用システムへの適用", 電子情報通信学会技術研究報告, vol. 第102巻,第503号, JPN6018051716, 5 December 2002 (2002-12-05), JP, pages 31 - 36, ISSN: 0004075040 *
福原聡: "プロダクト・レビュー 監視BlockS Pro", 月刊リナックスワールド, vol. 第4巻,第6号, JPN6018051713, 1 June 2005 (2005-06-01), JP, pages 108 - 111, ISSN: 0004075039 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108287509A (zh) * 2018-02-27 2018-07-17 上海瑞华(集团)有限公司 一种无人驾驶纯电动船的功能参数自动修整系统装置
US11947408B2 (en) 2020-03-27 2024-04-02 Panasonic Intellectual Property Management Co., Ltd. Anomaly detection method, anomaly detection recording medium, anomaly detection device, rewriting method, and rewriting device

Similar Documents

Publication Publication Date Title
JP5967059B2 (ja) 車両用電子制御装置
JP5849990B2 (ja) 車載制御装置及び車載制御システム
JP2017123119A (ja) 電子制御装置
JP6658417B2 (ja) 電子制御装置
JP6519515B2 (ja) マイクロコンピュータ
JP6259269B2 (ja) 故障判定機能を有する電子制御スロットルシステム
JP5226653B2 (ja) 車載制御装置
JP6663371B2 (ja) 電子制御装置
JP6183251B2 (ja) 電子制御装置
JP7029366B2 (ja) 自動車用電子制御装置
JP6447442B2 (ja) 電子制御装置
JP5268791B2 (ja) 制御システム
JP2016162330A (ja) 電子制御装置
JP6771272B2 (ja) 車載電子制御装置及びスタック使用方法
US6904543B2 (en) Electronic control having floating-point data check function
JP5942904B2 (ja) 処理装置
JP2014238661A (ja) 制御装置
JP2019094889A (ja) 車載制御装置
JP5924195B2 (ja) 電子装置
JP2009282849A (ja) マイクロコンピュータ
JP6533489B2 (ja) 車載用制御装置
JP2019164579A (ja) 電子制御装置
JP6561903B2 (ja) 電子制御装置
JP6784581B2 (ja) 自動車用電子制御装置及びdmaコントローラの異常検知方法
CN116639137A (zh) 可移动物体的控制装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180409

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190108

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20190716