(57)【要約】【課題】プログラムの暴走を精度良く検出可能な暴走検出装置を提供する。【解決手段】複数の関数から構成されたプログラムの暴走を検出する暴走検出装置であって、前記プログラムの各関数に従って所定の処理を実行する処理部と、前記処理部による制御に応じて暴走判定値を記憶する記憶部と、を備え、前記処理部は、各関数の処理実行前に、前記記憶部に記憶されている暴走判定値に基づいて、本関数が正規の順序で呼出された関数か否かを判定し、否の場合に前記プログラムが暴走していると判断する。【選択図】図１
2012141794.tif 000002
【特許請求の範囲】
【請求項１】
複数の関数から構成されたプログラムの暴走を検出する暴走検出装置であって、
前記プログラムの各関数に従って所定の処理を実行する処理部と、
前記処理部による制御に応じて暴走判定値を記憶する記憶部と、を備え、
前記処理部は、各関数の処理実行前に、前記記憶部に記憶されている暴走判定値に基づいて、本関数が正規の順序で呼出された関数か否かを判定し、否の場合に前記プログラムが暴走していると判断することを特徴とする暴走検出装置。
【請求項２】
前記処理部は、前記本関数が正規の順序で呼出された関数であると判定した場合、前記本関数の処理実行前と処理実行後において、前記記憶部に記憶されている暴走判定値と前記本関数の固有値との排他的論理和を演算し、その演算結果を新たな暴走判定値として前記記憶部に記憶させることを特徴とする請求項１に記載の暴走検出装置。
【請求項３】
前記処理部は、前記本関数の処理実行中に、他の関数の呼出しが必要となった場合、前記他の関数の呼出し前と呼出し元である前記本関数への復帰後において、前記記憶部に記憶されている暴走判定値と前記本関数の固有値との排他的論理和を演算し、その演算結果を新たな暴走判定値として前記記憶部に記憶させることを特徴とする請求項２に記載の暴走検出装置。
【請求項４】
前記固有値は、各関数の先頭アドレスであることを特徴とする請求項２または３に記載の暴走検出装置。
【請求項５】
前記複数の関数に割込み処理用の割込み関数が含まれている場合、前記割込み関数のそれぞれに対応して個別に前記記憶部を備えることを特徴とする請求項１〜４のいずれか一項に記載の暴走検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暴走検出装置に関する。
【背景技術】
【０００２】
従来では、ＷＤＴ(Watch Dog Timer)や下記特許文献１に記載された技術のように、タイマのカウントとプログラムによるタイマのクリア処理を利用してプログラムの暴走を検出する技術が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−６６９２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記従来技術では、プログラムが暴走した状態で、不正にクリア処理用の関数が実行されてしまった場合にはタイマがクリアされてしまうため、精度良くプログラムの暴走を検出することができなかった。
【０００５】
本発明は、上述した事情に鑑みてなされたものであり、プログラムの暴走を精度良く検出可能な暴走検出装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明に係る暴走検出装置は、複数の関数から構成されたプログラムの暴走を検出する暴走検出装置であって、前記プログラムの各関数に従って所定の処理を実行する処理部と、前記処理部による制御に応じて暴走判定値を記憶する記憶部と、を備え、前記処理部は、各関数の処理実行前に、前記記憶部に記憶されている暴走判定値に基づいて、本関数が正規の順序で呼出された関数か否かを判定し、否の場合に前記プログラムが暴走していると判断することを特徴とする。
【０００７】
また、上記の暴走検出装置において、前記処理部は、前記本関数が正規の順序で呼出された関数であると判定した場合、前記本関数の処理実行前と処理実行後において、前記記憶部に記憶されている暴走判定値と前記本関数の固有値との排他的論理和を演算し、その演算結果を新たな暴走判定値として前記記憶部に記憶させることを特徴とする。
【０００８】
また、上記の暴走検出装置において、前記処理部は、前記本関数の処理実行中に、他の関数の呼出しが必要となった場合、前記他の関数の呼出し前と呼出し元である前記本関数への復帰後において、前記記憶部に記憶されている暴走判定値と前記本関数の固有値との排他的論理和を演算し、その演算結果を新たな暴走判定値として前記記憶部に記憶させることを特徴とする。
【０００９】
また、上記の暴走検出装置において、前記固有値は、各関数の先頭アドレスであることを特徴とする。
また、上記の暴走検出装置において、前記複数の関数に割込み処理用の割込み関数が含まれている場合、前記割込み関数のそれぞれに対応して個別に前記記憶部を備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、プログラムが暴走して、正規の順序から外れた関数処理が不正に実行されてしまった場合、次に呼出される関数の処理実行前において、本関数が正規の順序で呼出された関数ではないと判定されるため、例えばＷＤＴのクリア処理用の関数が不正に実行されてしまうような場合であっても、精度良くプログラムの暴走を検出することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本実施形態における暴走検出装置１のブロック構成図である。
【図２】本実施形態における暴走検出装置１の動作フローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら、本発明の一実施形態について説明する。
図１は、本実施形態における暴走検出装置１のブロック構成図である。この図１に示すように、本実施形態における暴走検出装置１は、ＲＯＭ(Read Only Memory)１ａと、暴走検出レジスタ（記憶部）１ｂと、ＣＰＵ(Central Processing Unit：処理部)１ｃとを備えている。なお、図１中において、符号２はＣＰＵ１ｃが制御する制御ポートであり、符号３は制御ポート２によって点灯制御されるヒータランプである。
【００１３】
ＲＯＭ１ａは、複数の関数から構成されたプログラムを予め記憶している不揮発性メモリである。暴走検出レジスタ１ｂは、ＣＰＵ１ｃによる制御に応じて暴走判定値（初期値は「０」）を記憶するレジスタである。ＣＰＵ１ｃは、ＲＯＭ１ａに記憶されているプログラムの各関数に従って所定の処理を実行するものであり、例えば制御ポート２を介してヒータランプ３の点灯制御を行う。
【００１４】
また、ＣＰＵ１ｃは、各関数の処理実行前に、暴走検出レジスタ１ｂに記憶されている暴走判定値に基づいて、本関数（実行すべき関数として現在ＲＯＭ１ａから読込まれている関数）が正規の順序で呼出された関数か否かを判定し、否の場合にプログラムが暴走していると判断する機能を有している。
以下では、図２のフローチャートを参照しながら、ＣＰＵ１ｃによるプログラムの暴走判断動作について詳細に説明する。
【００１５】
図２に示すように、ＣＰＵ１ｃは、まずメイン関数を含む各関数の処理実行前に、暴走検出レジスタ１ｂに記憶されている暴走判定値が「０」か否かを判定する（ステップＳ１）。なお、詳細は後述するが、本関数が正規の順序で呼出された関数であれば、暴走判定値は「０」になり、一方、本関数が正規の順序で呼出された関数でなければ、暴走判定値は「０」以外の値となる。
【００１６】
ＣＰＵ１ｃは、上記ステップＳ１において「Ｎｏ」の場合、つまり暴走判定値が「０」以外の値であって、本関数が正規の順序で呼出された関数ではないと判定した場合、プログラムが暴走していると判断して、再起動（リセット）や制御ポート２によりヒータランプ３をオフ制御する等の暴走時処理を行う（ステップＳ２）。
【００１７】
一方、ＣＰＵ１ｃは、上記ステップＳ１において「Ｙｅｓ」の場合、つまり暴走判定値が「０」であって、本関数が正規の順序で呼出された関数であると判定した場合、本関数の処理実行前において、暴走検出レジスタ１ｂに記憶されている暴走判定値と本関数の先頭アドレス（固有値）とのＥＸＯＲ（排他的論理和）を演算し、その演算結果を新たな暴走判定値として暴走検出レジスタ１ｂに記憶させる（ステップＳ３）。
【００１８】
そして、ＣＰＵ１ｃは、本関数の本来の処理を実行し（ステップＳ４）、その処理実行後において、再度、暴走検出レジスタ１ｂに記憶されている暴走判定値と本関数の先頭アドレスとのＥＸＯＲを演算し、その演算結果を新たな暴走判定値として暴走検出レジスタ１ｂに記憶させ（ステップＳ５）、その後、本関数から呼出し元の関数へ復帰する（ステップＳ６）。
【００１９】
また、ＣＰＵ１ｃは、上記ステップＳ４において、本関数の処理実行中に、他の関数の呼出しが必要となった場合、他の関数の呼出し前に、暴走検出レジスタ１ｂに記憶されている暴走判定値と本関数の先頭アドレスとのＥＸＯＲを演算し、その演算結果を新たな暴走判定値として暴走検出レジスタ１ｂに記憶させ（ステップＳ４−１）、その後、他の関数の呼出しを行う（ステップＳ４−２）。ＣＰＵ１ｃは、他の関数を呼出すと、その呼出した関数について、同様にステップＳ１〜Ｓ６の処理を行う。
【００２０】
そして、ＣＰＵ１ｃは、他の関数から呼出し元である本関数への復帰後において、暴走検出レジスタ１ｂに記憶されている暴走判定値と呼出し元である本関数の先頭アドレスとのＥＸＯＲを演算し、その演算結果を新たな暴走判定値として暴走検出レジスタ１ｂに記憶させる（ステップＳ４−３）。
【００２１】
以上のような処理が各関数の処理実行時に行われることにより、プログラムが暴走しておらず、本関数（実行すべき関数として現在ＲＯＭ１ａから読込まれている関数）が正規の順序で呼出された関数であれば、ステップＳ１において暴走判定値は「０」になっているため、ＣＰＵ１ｃは正常にヒータランプ３の点灯制御を継続できる。
【００２２】
一方、プログラムが暴走して、正規の順序から外れた関数処理が不正に実行されてしまった場合、次に呼出される関数の処理実行前（つまりステップＳ１）において暴走判定値は「０」以外の値になり、本関数が正規の順序で呼出された関数ではないと判定されるため、例えばＷＤＴのクリア処理用の関数が不正に実行されてしまうような場合であっても、精度良くプログラムの暴走を検出することが可能となる。
【００２３】
従って、本実施形態によれば、例えばヒータランプ３を点灯した状態でプログラムが暴走し、ＷＤＴのクリア処理用の関数が不正に実行されて、ＷＤＴによる暴走検出が不可能な状況であっても、ヒータランプ３の組み込み機器（例えばプリンタやコピー機、複合機などの画像形成装置）に深刻なダメージを与える前に暴走を検出することができ、その暴走検出結果に基づいてＣＰＵ１ｃのリセットや制御ポート２によりヒータランプ３をオフ制御する等の暴走時処理を行うことができる。
【００２４】
なお、本発明は上記実施形態に限定されず、以下のような変形例が挙げられる。
（１）ＣＰＵ１ｃが実行すべきプログラムに割込み処理用の割込み関数が含まれている場合には、割込み関数のそれぞれに対応して個別に暴走検出レジスタ１ｂを設け、各割込み関数毎に暴走判定値のＥＸＯＲ演算を行うようにしても良い。
【００２５】
（２）上記実施形態では、ヒータランプ３を制御するために用いられるプログラム（言い換えれば、ヒータランプ３を制御するＣＰＵ１ｃ）の暴走を検出する暴走検出装置１を例示して説明したが、本発明はこれに限定されず、様々なシステムで用いられるプログラムの暴走（つまりＣＰＵの暴走）を検出する場合に広く適用することができる。
【００２６】
（３）上記実施形態では、暴走判定値とのＥＸＯＲを演算するために用いる本関数の固有値として、本関数の先頭アドレスを用いる場合を例示したが、この固有値は本関数と他の関数とを識別可能な値であれば他を使用しても良い。
【００２７】
（４）上記実施形態では、各関数の処理実行過程において、所定のタイミングで暴走判定値と本関数の先頭アドレス（固有値）とのＥＸＯＲを演算することにより、本関数の処理実行前に、本関数が正規の順序で呼出された関数か否かを判定するのに使用可能な暴走判定値を得る場合を例示したが、暴走判定値の演算手法はこれに限定されるものではなく、本関数が正規の順序で呼出された関数か否かを判定することができるような暴走判定値が得られれば、どのような演算手法を用いても良い。
【符号の説明】
【００２８】
１…暴走検出装置、１ａ…ＲＯＭ(Read Only Memory)、１ｂ…暴走検出レジスタ（記憶部）、１ｃ…ＣＰＵ(Central Processing Unit：処理部)、２…制御ポート、３…ヒータランプ
【図１】
2012141794.tif 000003
【図２】
2012141794.tif 000004