(57)【要約】【課題】  マイコンのプログラム用クロックの異常の有無を監視する。【解決手段】  ウエイト時間発生プログラムを実行するのに要する時間、即ち、ウエイト時間の予定値を予め求める。次に、ウエイト時間発生プログラムを実行し、実際にかかった時間、即ち、ウエイト時間の実際値を計測する。ウエイト時間の実際値がウエイト時間の予定値より大きい場合には、プログラム用クロックは異常であると判定する。【選択図】  図１
2006260421.tif 000002
【特許請求の範囲】
【請求項１】
ウエイト時間を発生させるためのウエイト時間発生プログラムの実行を開始するプログラム開始ステップと、
上記ウエイト時間発生プログラムの実行を開始したときフリーランカウンタのカウンタ値を第１のカウンタ値としてメモリに記憶する第１のメモリ記憶ステップと、
上記ウエイト時間発生プログラムの実行が終了したときに上記フリーランカウンタのカウンタ値を第２のカウンタ値としてメモリに記憶する第２のメモリ記憶ステップと、
上記第２のカウンタ値と上記第１のカウンタ値の差をウエイト時間の実際値として求めるウエイト時間の実際値演算ステップと、
正常なクロックを使用したと仮定したとき上記ウエイト時間発生プログラムを実行するのに要する時間をウエイト時間の予定値として演算するウエイト時間の予定値演算ステップと、
上記ウエイト時間の実際値が上記ウエイト時間の予定値より大きい場合に上記プログラム用クロックが異常であると判定する判定ステップと、
を有するクロック異常監視方法。
【請求項２】
請求項１に記載のクロック異常監視方法において、上記ウエイト時間発生プログラムは、機械語で記述されていることを特徴とするクロック異常監視方法。
【請求項３】
請求項１に記載の方法をコンピュータに実行させるためのコンピュータによって読み取り可能なプログラム。
【請求項４】
ウエイト時間を発生させるためのウエイト時間発生プログラムと、正確な時間を計数するフリーランカウンタと、上記ウエイト時間発生プログラムの実行を開始したとき上記フリーランカウンタのカウンタ値を第１のカウンタ値として記憶し上記ウエイト時間発生プログラムの実行が終了したときに上記フリーランカウンタのカウンタ値を第２のカウンタ値として記憶するメモリと、上記第２のカウンタ値と上記第１のカウンタ値の差をウエイト時間の実際値として求め、正常なクロックを使用したと仮定したとき上記ウエイト時間発生プログラムを実行するのに要する時間をウエイト時間の予定値として演算し、上記ウエイト時間の実際値が上記ウエイト時間の予定値より大きい場合に上記プログラム用クロックが異常であると判定する演算装置とを有するクロック異常監視装置。
【請求項５】
上記ウエイト時間発生プログラムは、機械語で記述されていることを特徴とするクロック異常監視装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータのプログラム用クロックの異常を検知する監視方法及び装置に関する。
【背景技術】
【０００２】
マイクロコンピュータ（以下、単に、マイコンという。）に搭載されたプログラムの実行時間は、プログラム用クロック、命令数及び１命令を動作させるステート数によって決まる。例えば、プログラム用クロックの周波数が１０ＭＨｚであり、１命令を１ステートで実行する場合、１命令を実行するのに０．１μｓの時間がかかる。従って、１０命令からなるプログラムを実行するのに要する時間は１．０μｓとなる。命令によっては、１命令を動作させるのに２ステート以上かかるものもある。例えば１命令を４ステートで実行する場合、１命令を実行するのに、０．４μｓかかる。従って、１０命令からなるプログラムを実行するのに要する時間は４．０μｓとなる。
【特許文献１】特開平10-161909号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
マイコン内部のプログラムは、プログラム用クロックに同期して命令を実行するが、プログラム用クロックの周波数を判定することができない。従って、プログラム用クロックが変化した場合には、実際のプログラムの実行時間は変化することとなる。
【０００４】
プログラム用クロックは、クロックパルス発生回路によって生成されるが、ある種のマイコンでは、周波数が異なる２つのプログラム用クロックを生成する。起動時には周波数が小さなプログラム用クロックが用いられ、起動後に周波数が大きなプログラム用クロックが用いられる。
【０００５】
しかしながら、２つのプログラム用クロックが正常に供給されないと、プログラムは暴走する可能性がある。また、プログラムが暴走しない場合でも、演算負荷が増大し、正常な演算ができない可能性がある。
【０００６】
本発明の目的は、マイコンのプログラム用クロックの異常の有無を常時監視することができるシステムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明によると、ウエイト時間発生プログラムを使用してウエイト時間を発生し、プログラム用クロックの異常を判定する。ウエイト時間発生プログラムに含まれる命令数及び１命令のステート数からウエイト時間発生プログラムを実行するのに要する時間、即ち、ウエイト時間の予定値を予め求める。次に、ウエイト時間発生プログラムを実行し、実際にかかった時間、即ち、ウエイト時間の実際値を計測する。ウエイト時間の実際値がウエイト時間の予定値より大きい場合には、プログラム用クロックは異常であると判定する。
【発明の効果】
【０００８】
本発明によれば、マイコンのプログラム用クロックの異常の有無を常時監視することができる。
【発明を実施するための最良の形態】
【０００９】
図１を参照して、マイコンのクロック発生機構を説明する。マイコン１は、クロックパルス発生回路１１、周波数切換器１２、レジスタ１３、プログラムの動作に使用するメモリ１４、プログラムを格納したＲＯＭ１５、その他の周辺機器１６、及び、クロック異常監視装置２０を含む。クロックパルス発生回路１１は、外部の水晶発振子２によって生成されたクロック信号ＣＬ０を入力し、プログラム用クロックＣＬ１と周辺機器用クロックＣＬ２の２種類のクロック信号を生成する。
【００１０】
ＲＯＭ１５には、マイコン１に接続された機器を制御するための各種プログラムが格納されている。
【００１１】
プログラム用クロックＣＬ１は、ＲＯＭ１５に格納されているプログラムを動作させるためのクロックであり、周波数が異なる複数のクロック、ここでは、２つのクロックが用いられる。プログラム用クロックＣＬ１は内部クロックと称されることもある。マイコン内のレジスタ１３の設定切換により、周波数切換器１２を介して、２つのプログラム用クロックは切り替えられる。初期状態では、周波数が小さいほうのプログラム用クロックが用いられる。プログラムの動作が開始されると、周波数が大きいほうのプログラム用クロックが用いられる。プログラムは、プログラム用クロックＣＬ１に同期して、１命令づつ実行される。
【００１２】
周辺機器用クロックＣＬ２は、マイコン１に内蔵されている周辺機器１６を動作させるためのクロックであり、フリーランカウンタ、シリアル通信などに用いる。周辺機器用クロックは、周辺クロックと称されることもある。
【００１３】
例えば、クロックパルス発生回路１１は、１０ＭＨｚのクロック信号ＣＬ０を入力し、４０ＭＨｚ及び８０ＭＨｚのプログラム用クロックＣＬ１と、２０ＭＨｚの周辺機器用クロックＣＬ２を生成する。
【００１４】
クロックパルス発生回路１１は、正常に作動し、２つのプログラム用クロックと周辺機器用クロックを正常に出力していると仮定する。周辺機器用クロックは、クロックパルス発生回路１１から直接、周辺機器１６に供給されるから、周辺機器１６は常に正常に作動する。しかしながら、プログラム用クロックは、周波数切換器１２を介して供給されるから、周波数切換器１２、レジスタ１３、等が故障又は誤動作すると、本来使用すべきクロックとは異なるクロックが出力されることとなる。もし、本来の使用すべきプログラム用クロックとは異なるプログラム用クロックが出力されると、プログラムが暴走するなどの問題が発生する可能性がある。
【００１５】
そこで、本発明では、クロック異常監視装置２０によって、プログラム用クロックの異常を監視する。
【００１６】
図２を参照して、本発明によるクロック異常監視装置２０の例を説明する。本例のクロック異常監視装置は、計測開始トリガ発生手段２１、ウエイト時間発生手段２２、計測終了トリガ発生手段２３、プログラム実行時間計測手段２４、プログラム用クロック異常判定手段２５、を有する。クロック異常監視装置に含まれる各手段は、プログラム用クロックＣＬ１に同期して、命令を実行する。
【００１７】
計測開始トリガ発生手段２１及び計測終了トリガ発生手段２３は、フリーランカウンタ１７に接続されている。フリーランカウンタ１７は、周辺機器用クロックＣＬ２に同期して、０から最大値（例えば６５５３５）までカウントアップし、最大値に達したら０に戻り、再度カウントアップを繰り返すカウンタである。
【００１８】
ウエイト時間発生手段２２は、ウエイト時間発生プログラムによって、ウエイト時間を発生する。ここで、ウエイト時間は、ウエイト時間発生プログラムを実行するのに要する時間、即ち、プログラム実行時間である。本例では、ウエイト時間の予定値と実際値を使用する。ウエイト時間の予定値は、ウエイト時間発生プログラムに含まれる命令数及び１命令のステート数から計算することができる。例えばプログラム用クロックの周波数が10MHｚであり、割り込みなどの影響を受けないと仮定した場合、1命令が1ステートである命令を１０個含むプログラムを実行するのに要する時間は、０．１μｓ×１０ステート＝１μｓである。これがウエイト時間の予定値である。一方、ウエイト時間の実際値は、ウエイト時間発生プログラムを実行したときに実際にかかった時間である。ウエイト時間の実際値が予定値より大きい場合には、プログラム用クロックが異常であると判断することができる。クロック異常監視装置２０の動作は、以下に、図３を参照して説明する。
【００１９】
図３を参照して、クロック異常監視装置２０の動作を説明する。ステップＳＴ１にて、計測開始トリガ発生手段２１が計測開始トリガを発生させると、フリーランカウンタ１７の現在値を、第１のメモリ、即ち、ＲＡＭ（Ａ）に格納する。例えば、フリーランカウンタ１７の分解能を１μｓとする。計測開始トリガの発生時点にて、フリーランカウンタの値が２９５μｓだとする。この場合、第１のＲＡＭ（Ａ）には、２９５μｓの値が格納される。
【００２０】
ステップＳＴ２にて、ウエイト時間発生手段２２は、ウエイト時間を発生させる。上述のように、ウエイト時間発生プログラムを実行することにより、ウエイト時間を発生させる。
【００２１】
ステップＳＴ３にて、ウエイト時間発生プログラムが終了したら計測終了トリガ発生手段２３は計測終了トリガを発生する。それによって、フリーランカウンタの現在値を、第２のメモリ、即ち、ＲＡＭ（Ｂ）に格納する。計測終了トリガの発生時点にて、フリーランカウンタの値が３０５μｓだったとする。この場合、第２のＲＡＭ（Ｂ）には、３０５μｓの値が格納される。
【００２２】
ステップＳＴ４にて、プログラム実行時間計測手段２４は、ウエイト時間発生プログラムを実際に実行した時間、即ち、ウエイト時間の実際値を演算する。ウエイト時間の実際値は、計測開始トリガの発生時点と計測終了トリガの発生時点におけるフリーランカウンタの値の差によって得られる。即ち、第２のＲＡＭ（Ｂ）の値と第１のＲＡＭ（Ａ）の値の差を求める。上述の例では、３０５μｓ−２９５μｓ＝１０μｓである。ウエイト時間の実際値を第３のメモリ、即ち、ＲＡＭ（Ｃ）に格納する。この場合、第３のＲＡＭ（Ｃ）には、１０μｓの値が格納される。
【００２３】
ステップＳＴ５にて、プログラム用クロック異常判定手段２５は、第３のＲＡＭ（Ｃ）に格納されたウエイト時間の実際値が予め求めたウエイト時間の予定値より大きいか否かを判定する。即ち、ウエイト時間の実際値がウエイト時間の予定値より大きい場合には、ステップＳＴ６に進み、プログラム用クロックが異常であると判定する。ウエイト時間の実際値がウエイト時間の予定値より大きくない場合には、プログラム用クロックは正常であると判定する。
【００２４】
本例のマイコンによると、プログラム用クロックの異常を常時監視するために、ステップＳＴ１からＳＴ６までの処理を、周期的に実行する。例えば、１０ｍｓ毎に実行する。
【００２５】
尚、クロック異常監視装置２０は、ハードウエアによって構成してもよいが、ソフトウエアとして、即ち、プログラム用クロックの異常の有無を監視するクロック異常監視プログラムとして構成されてよい。このようなクロック異常監視プログラムはＲＯＭ１５に格納される。
【００２６】
本例のクロック異常監視プログラムは、Ｃ言語で記述される。従って、クロック異常監視プログラムの構成要素であるウエイト時間発生プログラムもＣ言語で記述される。Ｃ言語で記述されたソースコードは、コンパイラ等によって機械語のコードに展開されてから読み出され、実行される。
【００２７】
図４は、Ｃ言語で記述されたウエイト時間発生プログラムのソースコードを機械語のコードに展開した状態を示す。ウエイト時間発生プログラムは、for文等によって所定の回数だけループ処理を行い、ウエイト時間を発生させる。ウエイト時間の予定値を求めるには、Ｃ言語で記述したソースコードを、コンパイラ等によって、機械語のコードに展開してから、命令数とステート数を算出する。命令数とステート数が得られれば、ウエイト時間の予定値を算出することができる。
【００２８】
しかしながら、Ｃ言語で記述したソースコードを、コンパイラ等によって機械語に展開すると、コンパイラのバージョン等が変わった場合には、機械語に展開されたコードが変化する場合がある。この場合、機械語に展開された命令数とステート数から算出したウエイト時間の予定値も変化する。即ち、Ｃ言語で記述したウエイト時間発生プログラムの場合、コンパイラ等の変更によって、ウエイト時間の予定値が変化する場合がある。
【００２９】
そこで、本例では、図５に示すように、クロック異常監視プログラムのうち、ウエイト時間発生プログラム５１をＣ言語で記述するのではなく、直接、機械語として記述し、それをＣ言語で記述したソースコード５２の中に埋め込む方式とした。従って、本例のクロック異常監視プログラムのウエイト時間発生プログラム５１は機械語で記述されているが、それ以外の部分はＣ言語で記述されている。これにより、コンパイラのバージョン等が変わった場合でも、ウエイト時間の予定値に影響を与えない。即ち、最初に算出したウエイト時間の予定値は変化しない。
【００３０】
尚、機械語で記述されたウエイト時間発生プログラム５１は、人が直接、ウエイト時間発生プログラム５１を機械語で記述することによって作成してもよいが、Ｃ言語で記述したウエイト時間発生プログラム５１を適当なコンパイラによって機械語に展開して作成してもよい。
【００３１】
以上、本発明の例を説明したが、本発明は、上述の例に限定されるものではなく、特許請求の範囲に記載された発明の範囲にて様々な変更が可能であることは当業者によって容易に理解されよう。
【図面の簡単な説明】
【００３２】
【図１】本発明によるクロック異常監視装置が組み込まれたマイコンの構成を示す図である。
【図２】本発明によるクロック異常監視装置の構造の例を示す図である。
【図３】本発明によるクロック異常監視装置の動作を説明するための説明図である。
【図４】本発明によるウエイト時間発生プログラムのソースコードを機械語に展開する状態を説明する図である。
【図５】本発明によるウエイト時間発生プログラムのソースコードを機械語で記述する方法を説明するための説明図である。
【符号の説明】
【００３３】
１…マイコン、２…水晶発振子、１１…クロックパルス発生回路、１２…周波数切替器、１３…レジスタ、１４…メモリ（ＲＡＭ）、１５…ＲＯＭ、１６…周辺機器、１７…フリーランカウンタ、２０…クロック異常監視装置、２１…計測開始トリガ発生手段、２２…ウエイト時間発生手段、２３…計測終了トリガ発生手段、２４…プログラム実行時間計測手段、２５…プログラム用クロック異常判定手段
【図１】
2006260421.tif 000003
【図２】
2006260421.tif 000004
【図３】
2006260421.tif 000005
【図４】
2006260421.tif 000006
【図５】
2006260421.tif 000007