(57)【要約】【課題】演算器を備えるマイコンがその演算器の動作を保証する方法を提供する。【解決手段】動作保証方法は、メモリが、直ちに復帰する正常動作時用関数と異常動作時用の処理を演算器を利用せずに行う異常動作時用関数とを記憶しており、かつ、所定の先頭アドレスから所定サイズの領域のうち、先頭アドレスに所定値を加算した第１のアドレスに、正常動作時用関数のアドレスを記憶しており、第１のアドレス以外の全てのアドレスに、異常動作時用関数のアドレスを記憶している状態で、ＣＰＵが、演算器に、正常時における結果値である正解値が所定値となる所定の動作検証用演算を行わせるステップと、ＣＰＵが、演算器が行った動作検証用演算の結果値を取得し、先頭アドレスに取得した結果値を加算したアドレスに記憶されているアドレスを、ＣＰＵが有する相対アドレス参照機能を用いて参照し、参照したアドレスの関数を実行するステップとを含む。【選択図】図２
2018081427.tif 000002
【特許請求の範囲】
【請求項１】
メモリと演算器とＣＰＵとを含むマイコンの前記ＣＰＵが実行する前記演算器の動作保証方法であって、
前記メモリが、直ちに復帰する正常動作時用関数と、異常動作時用の処理を前記演算器を利用せずに行う異常動作時用関数とを記憶しており、かつ、所定のアドレスを先頭アドレスとする所定サイズの領域のうち、前記先頭アドレスに所定値を加算した第１のアドレスに、前記正常動作時用関数のアドレスを記憶しており、前記第１のアドレス以外の全てのアドレスに、前記異常動作時用関数のアドレスを記憶している状態で、
前記ＣＰＵが、前記演算器に、正常時における結果値である正解値が前記所定値となる所定の動作検証用演算を行わせるステップと、
前記ＣＰＵが、前記演算器が行った前記動作検証用演算の結果値を取得し、前記先頭アドレスに取得した前記結果値を加算したアドレスに記憶されているアドレスを、前記ＣＰＵが有する相対アドレス参照機能を用いて参照し、参照したアドレスの関数を実行するステップとを含む、動作保証方法。
【請求項２】
前記異常動作時の処理は、前記マイコンのリセットエントリアドレスにジャンプする処理である、請求項１に記載の動作保証方法。
【請求項３】
前記マイコンは、前記異常動作時用の処理が行われるまで、定期的にウォッチドッグパルスを出力しており、
前記異常動作時用の処理は、前記ウォッチドッグパルスの出力を停止する処理である、請求項１に記載の動作保証方法。
【請求項４】
前記異常動作時用の処理は、さらに、割り込みを禁止し、無限ループに入る処理である、請求項３に記載の動作保証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイコンが備える演算器の動作を保証するための方法に関する。
【背景技術】
【０００２】
マイコンを有し高度な処理を実行する各種機器が普及している。例えば車両にはＥＣＵ(Electric Control Unit)が搭載されている。ＥＣＵは、１つ以上のマイコンを有し各種車両制御を行う。このようなマイコンを有する機器の信頼性の維持向上のため、マイコンの動作を他のマイコンが監視する各種技術が提案されている。
【０００３】
特許文献１は、少なくとも２つのマイコンと監視手段とを備え、第１のマイコンの動作を、第２のマイコンと監視手段とが二重で監視する装置を開示している。
【０００４】
特許文献２は、モータ制御マイコンの処理負荷を監視マイコンで監視し、処理負荷の増大等の異常発生につながる過渡的な現象を検出する装置を開示している。
【０００５】
なお、マイコンは、機能レベルおよび実装レベルにおいて多様な構成態様が可能であり、各構成要素の呼び方も多種存在するが、基本的には、プログラム、データ等を記憶しているメモリと、メモリへのアクセス、命令の取得実行、外部との通信等を行う制御部と、四則演算、論理演算、関係演算等を行う演算器とを含む。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−１８４４２３号公報
【特許文献２】特開２０１４−１５４０４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
図４に従来技術に係る、第１のマイコンの動作を、第２のマイコンと監視手段とが二重で監視する機器の一例に係る機能ブロック図を示す。第１のマイコン９１０は、第２のマイコン９２０および監視ＩＣ(Integrated Circuit)９３０に接続されている。第１のマイコン９１０は第１のＣＰＵ９１１、第１の演算器９１２および第１のメモリ９１３を備える。第２のマイコン９２０は第２のＣＰＵ９２１、第２の演算器９２２および第２のメモリ９２３を備える。第１のＣＰＵ９１１は、正常動作時には、定期的にウォッチドッグパルスを監視ＩＣ９３０に送信する。監視ＩＣ９３０はウォッチドッグタイマを備え、例えば装置の起動時に、ウォッチドッグタイマを起動し、ウォッチドッグパルスを受信するたびにウォッチドッグタイマを初期化する。しかし、第１のマイコン９１０に何らかの異常が発生して、ウォッチドッグパルスが送信不可能になったり、第１のＣＰＵ９１１が第１のマイコン９１０の異常を検出して、ウォッチドッグパルスの送信を停止したりすると、ウォッチドッグタイマが初期化されずにタイムアウトし、監視ＩＣ９３０は、リセット信号を第１のマイコン９１０に送信する。第１のＣＰＵ９１１はリセット信号を受信すると、第１のマイコン９１０のリセットを行う。また、第２のマイコン９２０は、第１のマイコン９１０が正常に動作しているか否かを監視しており、正常に動作していないことを検出した場合は、リセット信号を第１のマイコン９１０に送信し、第１のマイコン９１０のリセットを行う。
【０００８】
第１のマイコン９１０および第２のマイコン９２０は、例えば１つのＥＣＵに搭載される場合もあるし、２つのＥＣＵに１つずつ搭載される場合もある。いずれの場合であっても、第１のマイコン９１０の動作を第２のマイコン９２０が監視する上述の方法では、構成要素が多く、また、２つのマイコン間の通信を行う必要がある。そのため、構成、処理が複雑で、他の機能動作のための処理や通信を妨げないよう実行タイミングの制約が多く、十分な動作保証が困難である。また、マイコンの数を減らすことができず、コスト低減を図るうえでの妨げとなる。
【０００９】
そのため、マイコンの動作保証をなるべくそのマイコン自体で行うことが望ましい。しかし、マイコンが備える演算器の検証をする場合、演算結果の検証のために検証対象である演算器自体の演算機能を利用すると、演算結果に信頼性がなく動作保証したことにはならないため他のマイコンの演算器を用いる必要があった。
【００１０】
本発明は、上記課題を鑑みてなされたものであり、演算器を備えるマイコン自体がその演算器の動作を保証するための方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明の一局面は、メモリと演算器とＣＰＵとを有するマイコンのＣＰＵが実行する演算器の動作保証方法である。この動作保証方法は、メモリが、直ちに復帰する正常動作時用関数と、異常動作時用の処理を演算器を利用せずに行う異常動作時用関数とを記憶しており、かつ、所定の先頭アドレスから所定サイズの領域のうち、先頭アドレスに所定値を加算した第１のアドレスに、正常動作時用関数のアドレスを記憶しており、第１のアドレス以外の全てのアドレスに、異常動作時用関数のアドレスを記憶している状態で、ＣＰＵが、演算器に、正常時における結果値である正解値が所定値となる所定の動作検証用演算を行わせるステップと、ＣＰＵが、演算器が行った動作検証用演算の結果値を取得し、先頭アドレスに取得した結果値を加算したアドレスに記憶されているアドレスを、ＣＰＵが有する相対アドレス参照機能を用いて参照し、参照したアドレスの関数を実行するステップとを含む。これにより、演算器による結果値と正解値とを他のマイコンの演算器を用いて比較し一致するか否かを判定しなくても、演算器による結果値が正解値と一致していれば、正常動作時用関数が実行され、一致していなければ異常動作時用関数が実行される。異常動作時用関数で、リセット等の対策が実行できるため、他のマイコンを用いなくても、演算器の正常動作を保証することができる。
【００１２】
また、異常動作時の処理は、マイコンのリセットエントリアドレスにジャンプする処理であってもよい。これにより、異常動作時には、マイコンを直ちにリセットすることができる。
【００１３】
また、マイコンは、異常動作時用の処理が行われるまで、ウォッチドッグパルスを出力しており、異常動作時用の処理は、ウォッチドッグパルスの出力を停止する処理であってもよい。これにより、異常動作時には、マイコンは、ウォッチドッグパルスを監視する監視ＩＣからリセット信号を受信することとなり、マイコンをリセットすることができる。また、リセットまでの一定期間は、動作を継続できる。
【００１４】
また、異常動作時用の処理は、さらに、割り込みを禁止し、無限ループに入る処理であってもよい。これにより、異常動作時には、マイコンは、ウォッチドッグパルスを監視する監視ＩＣからリセット信号を受信することとなり、マイコンをリセットすることができる。また、動作を直ちに停止することができる。
【発明の効果】
【００１５】
本発明によれば、演算器を備えるマイコン自体がその演算器の動作を保証するための方法を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施形態に係る装置の機能ブロック図
【図２】本発明の一実施形態に係る動作検証処理のフローチャート
【図３】本発明の一実施形態に係る配列のデータ構造を示す図
【図４】従来技術に係る装置の機能ブロック図
【図５】比較例に係る動作検証処理のフローチャート
【発明を実施するための形態】
【００１７】
（概要）
本発明は、マイコンが備える演算器の動作保証をそのマイコン自体が行うための方法である。本発明では、メモリの、所定の先頭アドレスから所定サイズの領域のうち、第１のアドレスに、正常動作時用関数のアドレスを記憶しておき、他のアドレスに、異常動作時用関数のアドレスを記憶しておく。動作検証処理として、ＣＰＵが、演算器に、動作検証用演算を行わせる。つぎに、先頭アドレスに演算結果の値を加算したアドレスに記憶されているアドレスを、ＣＰＵが有する相対アドレス参照機能を用いて参照し、参照したアドレスの関数を実行する。第１のアドレスは先頭アドレスに動作検証用演算の正解値を加算したアドレスである。演算器による結果値が正解値であれば、正常動作時用関数が実行される。正解値でなければ、異常動作時用関数が実行される。このように、他のマイコンの演算器を用いて比較し一致するか否かを判定しなくても、演算器に異常が発生し、演算結果が正解値でなければ異常動作時用関数が実行されリセット等の対策が実行できるため、他のマイコンを用いずに演算器の動作検証が可能であり正常動作を保証することができる。
【００１８】
以下、本発明の一実施形態について、図面を参照しながら詳細に説明する。
【００１９】
（構成）
図１は、本実施の形態に係る、マイコン１００と監視ＩＣ１３０とを含む電子装置の機能ブロックを示す図である。マイコン１００は、ＣＰＵ(Central Processing Unit)１０１、演算器１０２、各種データ、プログラムやルーチン（関数）を記憶したメモリ１０３を備える。ＣＰＵ１０１は、メモリ１０３のデータの読み書き、プログラム（命令）の実行、マイコン１００に接続された図示しない外部の機器との通信等の処理を行う。プログラムの実行において必要があれば演算器１０２に演算を行わせ、結果を用いて処理を続ける。このように、本明細書では、ＣＰＵ１０１と動作検証対象となる演算器１０２とを別体の機能ブロックとして説明する。すなわち、マイコン１００のうち、データの読み書き、プログラムの実行、通信等を行う制御部としての機能を有し、演算器１０２としての機能を有しない部分をＣＰＵ１０１と呼ぶことにする。ＣＰＵ１０１は、正常動作時には、定期的にウォッチドッグパルスを監視ＩＣ１３０に送信する。監視ＩＣ１３０はウォッチドッグタイマを備え、ウォッチドッグパルスを受信するとウォッチドッグタイマをリセットする。マイコン１００に何らかの異常が発生して、ウォッチドッグパルスが送信不可能になったり、ＣＰＵ１０１がマイコン１００の異常を検出して、ウォッチドッグパルスの送信を停止したりすると、ウォッチドッグタイマがタイムアウトし、監視ＩＣ１３０は、リセット信号をマイコン１００に送信する。ＣＰＵ１０１はリセット信号を受信すると、マイコン１００のリセット（初期化、再起動）を行う。
【００２０】
メモリ１０３には動作検証処理のためのプログラムやデータが記憶されている。プログラムには、後述する正常動作時用関数および異常動作時用関数が含まれる。また、メモリ１０３の所定のアドレスを先頭とする所定のアドレス範囲の領域を配列Ａｌｌａｙ［ｎ］（ｎ＝０、１、２、…、Ｎ）で表すことにすると、所定のＹの値（０、１、２、…、Ｎのいずれか）について、Ａｌｌａｙ［Ｙ］（上述の第１のアドレスに対応）には正常動作時用関数のアドレス値（関数ポインタ）が記憶されている。また、Ａｌｌａｙ［０］〜Ａｌｌａｙ［Ｎ］のうち、Ａｌｌａｙ［Ｙ］以外の全ての要素には、異常動作時用の処理を行う異常動作時用関数のアドレス値（関数ポインタ）が記憶されている。図３にメモリ１０３における配列の構造を模式的に示す。ここでＹは後述するテスト用の所定の演算ｆ（ｘ）（ｘは所定の引数）の正解値である。
【００２１】
メモリ１０３はＲＯＭであって、固定の領域にプログラムやデータが予め記憶されていてもよいし、メモリ１０３はＲＡＭであって、ＣＰＵ１０１が動的に領域を確保しプログラムやデータを他のメモリ等から適宜ロードしてもよい。メモリ１０３がＲＡＭである場合、アドレス値の信頼性確保のため、例えば、後述の動作検証処理の実行直前に、実行の都度、配列用の領域の確保とアドレス値のロードとを行ってもよい。
【００２２】
（処理）
図２に、本実施形態に係る、マイコン１００のＣＰＵ１０１が演算器１０２の動作検証のために実行する処理を表すフローチャートを示し、以下にその各ステップを説明する。
【００２３】
〔ステップＳ１１〕：ＣＰＵ１０１は、演算器１０２に、テスト用の所定の演算ｆ（ｘ）（ｘは所定の引数）を実行させる。演算は、加減乗除、ビットシフト、論理演算等、演算器１０２の特性に応じて、演算機能に異常があれば正解値以外の演算結果となるよう定められる。
【００２４】
〔ステップＳ１２〕：ＣＰＵ１０１は、演算器１０２による演算結果の値ｙを取得する。
【００２５】
〔ステップＳ１３〕：ＣＰＵ１０１は、メモリ１０３の所定のアドレスＡｌｌａｙ［０］に演算結果の値ｙを加算したアドレスを参照する。すなわち、上述の配列の要素Ａｌｌａｙ［ｙ］の値を参照する。この加算の処理は、ＣＰＵ１０１が有する相対アドレス参照機能を用いて実行するため、演算器１０２を用いることなく実行できる。
【００２６】
〔ステップＳ１４〕：ＣＰＵ１０１は、ステップＳ１３で参照したＡｌｌａｙ［ｙ］の値をアドレスとする関数を実行する。ＣＰＵ１０１は、参照した関数ポインタにジャンプする。異常動作時用関数は、演算器１０２に異常があっても実行できるよう、演算器１０２を利用しない命令群からなる。
【００２７】
ステップＳ１１における演算器１０２の演算結果の値ｙが正解値Ｙに等しい場合、すなわち、演算器１０２が正常動作している場合、ステップＳ１４において、正常動作時用関数が実行される。正常動作時用関数は、何も処理を行わない関数（直ちに呼び出し元に復帰する関数）であり、直ちに本フローは終了する。
【００２８】
ステップＳ１１における演算器１０２の演算結果の値ｙが正解値Ｙに等しくない場合、すなわち、演算器１０２が異常動作している場合、ステップＳ１４において、異常動作時用関数が実行される。
【００２９】
このように、ステップＳ１４では、演算器１０２の比較演算機能を用いて場合分けすることなく、演算結果の値ｙが正解値Ｙに等しいか否かによって、結果的に異なる処理が実行される。
【００３０】
異常動作時用関数の処理としては、マイコン１００をリセットする処理が挙げられる。演算器１０２の異常動作が一時的な原因によるものであれば、マイコン１００をリセットし再起動すれば、正常動作に復旧する。また、もし演算器１０２の異常動作が恒久的な故障によるものであって、正常動作に復旧しない場合であっても、再起動の過程等で、他のセーフティ機能を動作させ、マイコン１００の動作停止、警告報知等の安全措置を取らせることができる。なお、マイコン１００をリセットする以外に、マイコン１００がつかさどる所定の機能を停止する等の処理を行ってもよい。
【００３１】
本例のように監視ＩＣ１３０がマイコン１００が出力するウォッチドッグパルスに基づいてマイコン１００を監視する場合、マイコン１００をリセットする処理としては、ウォッチドッグパルスの出力を停止する処理が挙げられる。この場合、監視ＩＣ１３０からリセット信号を受信するまでは、マイコン１００は、異常動作時用関数を抜けて、各種の機能動作を続けることができる。また、ウォッチドッグパルスの出力を停止する処理に加え、割り込みを禁止し、無限ループに入るようにしてもよい。この場合、マイコン１００は、各種の機能動作を直ちに停止することができる。機能動作を続けるか直ちに停止するかは、いずれがより安全か、あるいは、演算器１０２の異常による影響が深刻であるか否か、等に基づいて設計することができる。また、マイコン１００をリセットする処理は、スタートアップ処理の開始アドレス等のリセットエントリアドレスにジャンプする処理であってもよい。この場合、マイコン１００は直ちに初期化および再起動を行う。この処理を行う場合はウォッチドッグパルスを監視ＩＣ等によって監視する仕組みを設けない場合にも適用できる。なお、異常動作時用関数が無限ループやリセットエントリアドレスにジャンプする処理を含む場合、上記フローは異常動作時用関数から抜ける形では終了せず、マイコン１００のリセットによる中断の形で終了することになる。
【００３２】
動作検証処理を行うタイミングは限定されないが、例えばウォッチドッグパルスを監視ＩＣ１３０に送信するための定期的な割り込み処理において、毎回あるいは所定回おきに行ってもよく、他のタイミングで行ってもよい。
【００３３】
このような動作検証処理は、常時、定期的に実行してもよいし、所定の機能が動作している時のみ実行してもよい。また、複数のマイコンを有する装置やシステムにおいては、このような動作検証処理を全部のマイコンが行ってもよいし、重要な機能をつかさどる一部のマイコンのみが行ってもよい。例えば車載システムにおいて、走行機能をつかさどるＥＣＵのマイコンが、車両の走行中に動作検証処理を実行するものとしてもよい。
【００３４】
（効果）
以上説明したステップＳ１１〜Ｓ１４の動作検証処理においては、ＣＰＵ１０１は、自身の相対アドレス参照機能を用いて、演算器１０２の演算結果が正解値と一致する場合は正常動作時の処理を実行し、一致しない場合は異常動作時の処理を実行することができる。そのため、他のマイコンの演算器を利用して、演算器１０２の演算結果と正解値との比較演算をする必要がない。このように、１つのマイコン１００で自己完結的に演算器１０２の動作検証ができるため、２つのマイコン間の通信を行う必要がなく、実行タイミングの自由度が高く、十分な動作保証が可能である。また、演算器１０２の検証のために第２のマイコンを設ける必要がなく、装置あるいはシステム全体のコスト低減が容易となる。また、このような処理方法は、マイコンを備える多様な装置、システムに適用できる。
【００３５】
（比較例）
上述の実施形態と比較するため、図４に示す装置において、第１のマイコン９１０が備える第１の演算器９１２の動作を、第２のマイコン９２０が検証する場合について説明する。
【００３６】
本比較例では、第２のマイコン９２０が、第１の演算器９１２による演算結果と正解値との比較演算を、第２の演算器９２２に実行させる。図５に第１のＣＰＵ９１１と第２のＣＰＵ９２１とが実行する動作検証処理を表すフローチャートを示し、以下にその各ステップを説明する。
【００３７】
〔ステップＳ９１〕：第１のマイコン９１０の第１のＣＰＵ９１１が第１の演算器９１２に、テスト用の所定の演算ｆ（ｘ）（ｘは所定の引数）を実行させる。
〔ステップＳ９２〕：第１のＣＰＵ９１１は、第１の演算器９１２による演算結果ｙを取得し、第２のマイコン９２０に送信する。
〔ステップＳ９３〕：第２のマイコン９２０が、演算結果ｙを受信する。
〔ステップＳ９４〕：第２のＣＰＵ９２１は、演算結果ｙが正解値Ｙに等しいか否かを判定するための比較演算を、第２の演算器９２２に実行させる。なお、正解値Ｙとして、第２の演算器９２２が演算ｆ（ｘ）を実行した結果の値を用いてもよく、予め与えられた所定値を用いてもよい。
〔ステップＳ９５〕：第２のＣＰＵ９２１は、比較演算結果を取得し、等しければ処理を終了し、等しくなければ、ステップＳ９６に進む。
〔ステップＳ９６〕：第２のＣＰＵ９２１は、リセット信号を第１のマイコン９１０に送信して処理を終了する。
【００３８】
この方法では、構成要素が多く、また、２つのマイコン間で通信を行い、各マイコンがそれぞれ処理を行う必要がある。そのため、実行タイミングの制約が多く、十分な動作保証が困難である。また、第２のマイコンが必須であり、コスト低減が困難である。
【産業上の利用可能性】
【００３９】
本発明は、マイコンを備える多様な装置、システムに有用である。
【符号の説明】
【００４０】
１００    マイコン
１０１    ＣＰＵ
１０２    演算器
１０３    メモリ
１３０    監視ＩＣ
９１０    第１のマイコン
９１１    第１のＣＰＵ
９１２    第１の演算器
９１３    第１のメモリ
９２０    第２のマイコン
９２１    第２のＣＰＵ
９２２    第２の演算器
９２３    第２のメモリ
【図１】
2018081427.tif 000003
【図２】
2018081427.tif 000004
【図３】
2018081427.tif 000005
【図４】
2018081427.tif 000006
【図５】
2018081427.tif 000007