(57)【要約】      （修正有）【課題】ユーザの誤操作をプログラムの実行異常と判断することを可及的に解消し、また、複雑なプログラム構成とならないプログラムの実行異常検出方法を提供する。【解決手段】所定のプログラムの処理に基づき目的とする機能を実現するシステムにおけるプログラムの実行異常を検出する方法であって、前記システムの入力操作手段の操作パターンを検出し、その操作パターンと想定通常パターンとの乖離の程度に基づいて前記プログラムの実行に異常が発生したことを推定するとともに、プログラムの使用開始に関する基準時からの時間経過情報を参照し、その時間経過情報が所定値に達していない場合は、過渡的に、前記プログラムの異常推定結果を無効化するか、又は前記プログラムの異常推定の処理自体を実行させないようにすれば、ユーザの誤操作をプログラムの実行異常と判断することを可及的に解消可能となる。【選択図】        図３
2004240581.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラムの処理に基づき目的とする機能を実現するシステムにおけるプログラムの実行異常を検出する方法であって、
前記システムの入力操作手段の操作パターンを検出し、その操作パターンと想定通常パターンとの乖離の程度に基づいて前記プログラムの実行に異常が発生したことを推定するとともに、
前記プログラムの使用開始に関する基準時からの時間経過情報を参照し、その時間経過情報が所定値に達していない場合は、過渡的に、前記プログラムの異常推定結果を無効化するか、又は前記プログラムの異常推定の処理自体を実行させないようにしたことを特徴とするプログラム実行異常検出方法。
【請求項２】
前記システムの入力操作手段の操作間隔を検出し、その操作間隔が所定値より短いかどうかに基づいて前記プログラムの実行に異常が生じたことを推定する請求項１に記載のプログラム実行異常検出方法。
【請求項３】
前記プログラムの実行異常の推定結果が出力され、かつ前記プログラムの使用開始に関する基準時からの時間経過情報が所定値に達している場合には、再起動信号等の前記プログラムの実行異常を解消するための信号が自動的に出力されるようにした請求項１に記載のプログラム実行異常検出方法。
【請求項４】
所定のプログラムの処理に基づき目的とする機能を実現するシステムにおけるプログラムの実行異常を検出する装置であって、
前記システムの入力操作手段の操作パターンを検出する操作パターン検出手段と、
その操作パターンと通常の想定操作パターンとの乖離の程度に基づいて前記プログラムの異常を推定するプログラム異常推定手段と、
前記プログラムの使用開始に関する基準時からの時間経過情報を生成する時間経過情報生成手段と、
その時間経過情報が予め定められたしきい値に達したかどうかを判定する時間経過程度判定手段と、
その時間経過情報が前記しきい値に達していない場合は、前記プログラム異常推定手段の判断結果を無効化するか、又は前記プログラム異常推定手段の推定処理自体を実行させない過渡的なプログラム実行異常判定機能停止手段と、
を含むことを特徴とするプログラム実行異常検出装置。
【請求項５】
前記操作パターン検出手段は、前記システムの入力操作手段の操作間隔を検出する操作間隔検出手段を含み、前記プログラム異常推定手段は、その操作間隔が予め定められたしきい値より短いかどうかに基づいて前記プログラムの異常を推定するものである請求項４に記載のプログラム実行異常検出装置。
【請求項６】
前記プログラム異常推定手段がプログラム実行異常の推定結果を出力し、かつ前記時間経過程度判定手段により前記プログラムの使用開始に関する基準時からの時間経過情報が所定値に達していると判断されている場合に、再起動信号等の前記プログラムの実行異常を解消するための信号が自動的に出力されるプログラム実行異常解消手段を備える請求項４に記載のプログラム実行異常検出装置。
【請求項７】
前記入力操作手段は、スイッチによるオンオフを行うものであって、前記操作パターン検出手段は、該スイッチの押下間隔を検出する押下間隔検出手段と、該スイッチの押下回数を検出する押下回数検出手段とを備え、
前記プログラム異常推定手段は、その押下間隔検出手段が検出した該スイッチ押下間隔が、所定の値を下回ったときが連続して所定の回数発生したことを前記押下回数検出手段によって検出されたときに、前記プログラムの実行異常を推定する信号を出力するものである請求項４ないし６のいずれか１項に記載のプログラム実行異常検出装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムで制御される機器におけるプログラム暴走検出方法に関する。
【０００２】
【従来の技術】
マイクロプロセッサを含むストアードプログラム方式の情報処理又は処理システムでは、メモリ（ＲＯＭやＲＡＭ等）に格納されたプログラムに基づいて各種演算又は処理を行う。このとき、プログラムにエラー（バグ等）があると、プログラムが暴走して、システムを再起動しなければ復旧しないこともある。そこで、プログラムの暴走検出には、一般的に、常時カウントをし続け一定時間が経過するとオーバーフローする、ウォッチドッグタイマ（Ｗａｔｃｈ  Ｄｏｇ  Ｔｉｍｅｒ）が使用される。プログラムは、オーバーフローしないように定期的にウォッチドッグタイマをクリアしているが、プログラムが暴走した場合には、ウォッチドッグタイマをクリアすることができず、結果的にウォッチドッグタイマがオーバーフローして暴走が検出され、プログラム再起動等の暴走対策処理を実行する。しかし、ウォッチドッグタイマはプログラムの暴走の予兆までは検出できないし、プログラムは暴走していてもウォッチドッグタイマがオーバーフローしない場合もある。よって、プログラムが暴走してシステムが致命的な状態に至ることを防ぐために、プログラムの暴走の予兆を検知するような異常検出処理あるいは暴走対策処理が行われている
【０００３】
プログラム実行時の異常を検出するには、以下のような方法がある。
（１）メインプログラムと割り込みプログラムが共通のカウンタを操作し、カウンタ値を監視することにより、メインプログラムと割込プログラム間で実行遷移が行われていないことを検知してプログラム異常と判定する方法。（特許文献１参照）
（２）複数の暴走監視用のウォッチドッグパルス出力用フラグを設け、該フラグをリセットする箇所をプログラム内の複数の処理内に分散し、全てのフラグがリセットされていない場合にプログラム異常と判定する方法。（特許文献２参照）
（３）一つのカウンタをプログラムの複数箇所でカウントアップし、チェックポイントで所定のカウンタ値となっていない場合にプログラム実行異常と判定する方法。（特許文献３参照）
（４）マルチタスクＯＳにおいて、タスク毎に所定のタイミングでクリアされる暴走検出用のタイマを設け、タイマがクリアされていない場合にプログラム実行異常と判定する方法。（特許文献４参照）
（５）ＲＯＭ／ＲＡＭの未使用領域に任意の割り込み命令を書き込んでおき、プログラムが未使用領域にアクセスした場合には、該当する割り込みが発生することでプログラム実行異常と判定する方法。（特許文献５参照）
（６）プログラムの実行アドレスが所定の範囲内に存在しているかを定期的に監視し、範囲内に存在していない場合、あるいは、プログラムの命令コード全体の和（以下、チェックサム値と称する）を定期的に求め、チェックサム値が所定値でない場合にはプログラム実行異常と判定する方法。（特許文献６参照）
【０００４】
【特許文献１】
特開平９−１６０８０７号公報
【特許文献２】
特開平１１−３２７９５８号公報
【特許文献３】
特開平１１−１８４７３５号公報
【特許文献４】
特開２０００−６６９２６号公報
【特許文献５】
特開２００２−２１５４２７号公報
【特許文献６】
特開２００２−２３６６００号公報
【０００５】
【発明が解決しようとする課題】
前述した（１）〜（４）の方法は、プログラムが正常に実行されている場合に任意の動作を行う仕組みをプログラム内に組み込み、プログラムあるいはハードウェアによって監視し、該動作の結果が予め想定された結果と異なる場合にプログラム異常と判定するものである。この場合、プログラム容量，処理の負荷を考慮すると、致命的な異常のみを検出できるように機能実装するのが通常で、想定される全ての異常を検出するように機能実装することは困難である。また、（５）の方法は、プログラムが暴走状態でも不正なアドレスにアクセスしなければ異常を検知できない。（６）の方法についても、プログラムが暴走状態でも、実行アドレスが所定の範囲内に収まっている場合や、チェックサム値が正常値である場合は異常を検出できない。
【０００６】
プログラムに異常が発生した場合、ユーザのスイッチ操作に対して機器が反応しない状態になることがある。このとき、ユーザはスイッチ操作を繰り返して、機器の反応を促そうとする。また、他にもスイッチがある場合には、通常の操作手順に関係なく無作為に相当の頻度で押すことが多い。これらの機器動作異常時におけるユーザのスイッチ操作パターンを判別することができれば、既存のスイッチ操作処理に若干の処理を追加するだけで、プログラムの実行異常を簡単な仕組みで検出する方法を提供できる。しかし、ユーザが機器を使用し始めた時期は、操作に不慣れなためにスイッチを連続して押したり、スイッチの操作順を間違えたりすることがある。よって、この方法では、ユーザの誤操作をプログラムの実行異常と判定し、暴走対策処理を実行してしまう恐れもある。
【０００７】
上記事情を背景として、本発明の課題は、ユーザの誤操作をプログラムの実行異常と判断することを可及的に解消し、また、複雑なプログラム構成とならないプログラムの実行異常検出方法を提供することにある。
【０００８】
【課題を解決するための手段及び発明の効果】
本発明は、所定のプログラムの処理に基づき目的とする機能を実現するシステムにおけるプログラムの実行異常を検出する方法であって、前記システムの入力操作手段の操作パターンを検出し、その操作パターンと想定通常パターンとの乖離の程度に基づいて前記プログラムの実行に異常が発生したことを推定するとともに、プログラムの使用開始に関する基準時からの時間経過情報を参照し、その時間経過情報が所定値に達していない場合は、過渡的に、プログラムの異常推定結果を無効化するか、又はプログラムの異常推定の処理自体を実行させないことを特徴としている。これによって、ユーザの誤操作をプログラムの実行異常と判断することを可及的に解消できる。
【０００９】
また、ユーザが操作するスイッチの押下状態を常時プログラムで監視し、スイッチが短時間に連続して押下されたような、機器動作異常時におけるユーザのスイッチ操作パターンを検出した場合、その操作パターンと通常の想定操作パターンとの乖離の程度に基づいてプログラムの異常を推定し、プログラムを再起動するような実行異常検出処理とすれば、プログラムに複雑な仕組みを設けることなく、プログラムの実行時に異常が発生したことを検知できる。また、プログラムが複雑にならないことで、処理の負荷の増加量や潜在バグ数も少なく抑えられる。さらに、ユーザは機器の再起動などの異常復旧操作をする必要がなくなり、操作負荷が軽減される。
【００１０】
【発明の実施の形態】
以下、本発明の実施の形態を、図面に示す実施例を参照しながら説明する。図１は本発明をナビゲーション装置に適用した実施例の全体構成を示すブロック図である。なお、本発明はナビゲーション装置に限定されるものではなく、スイッチを有し、プログラムにより制御される機器に広く適用される。
【００１１】
本ナビゲーション装置１００は、衛星からの電波に基づいて車両の位置を検出するＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）のためのＧＰＳアンテナ１０１およびＧＰＳレシーバ１０２，ＬＣＤディスプレイ１０６，タッチパネル１１８，ＤＶＤドライブ１２４，ＤＶＤドライブ１２４に挿入して使用する地図ディスク１２３，音声案内などを行うスピーカ１０５を備えている。これらは、入出力回路１３２，バス１２６を介してＣＰＵ１１２と接続され、信号およびデータの遣り取りを行う。
【００１２】
ＣＰＵ１１２には、バス１２６を介して、ナビゲーション装置の実行プログラムが格納されたＲＯＭ１０９，プログラムの実行に必要な情報を記憶するためのＲＡＭ１１０，ナビゲーション装置１００の電源スイッチ１１６をオフにしても保持すべき情報を記憶するためのＦｌａｓｈＲＯＭ１１１，現在の日時を記憶するカレンダＩＣ１１７が接続されている。カレンダＩＣ１１７は、カレンダ用発振器１３１からのクロック信号により計時動作を行い、ナビゲーション装置１００の電源スイッチ１１６がオフ状態になっても計時動作が停止しないように、バックアップバッテリ１３０から電源が供給される。なお、最初の年日時データの設定は工場出荷時に行われるものとする。ＦｌａｓｈＲＯＭ１１１には、カレンダＩＣ１１７から得られる年日時情報を保持するためのカレンダ情報記憶領域などが設けられる。
【００１３】
また、ＣＰＵ１１２には、動作の基準となるクロック信号を供給する発振器１１５が接続されている。ＣＰＵ１１２に内蔵されたフリーランカウンタ（ＦＲＣ：Ｆｒｅｅ  Ｒｕｎｎｉｎｇ  Ｃｏｕｎｔｅｒ）１１４は、発振器１１５からの基準クロック信号を基準とする一定の周期でカウントアップを行い、オーバーフローしたら再度ゼロからカウントアップを行う動作を繰り返す。さらに、ＣＰＵ１１２のリセット動作を確実に行うためのリセット回路１１３が、ＲＥＳＥＴ端子と汎用出力ポートであるリセット指令出力端子（ＲｅｓｅｔＲｅｑ）を介して接続されている。ＣＰＵ１１２は、リセット指令出力端子（ＲｅｓｅｔＲｅｑ）からリセット回路１１３対してリセット指令を出す。リセット回路１１３は、電源スイッチ１１６がオフ状態からオン状態に変化したとき、あるいは、ＣＰＵ１１２からリセット指令を受けたときに、ＣＰＵ１１２のＲＥＳＥＴ端子に対して、電源回路１２２と発振器１１５の動作が十分安定するまでリセット状態を保ち、その後リセット状態を解除する。
【００１４】
電源回路１２２は、本ナビゲーション装置１００が動作するための電源を、外部に接続したバッテリ１２１から生成する。電源スイッチ１１６がオン状態のときに、電源回路１１２に電源が供給される。
【００１５】
ＬＣＤディスプレイ１０６は、カラー液晶表示器により構成されており、画面にはＧＰＳレシーバ１０２から入力された車両現在位置マークと、地図ディスク１２３から入力された地図データと、更に地図上に表示する誘導経路等付加データとを重ね合わせて表示するとともに、本画面に経路案内の設定および経路誘導中の案内や画面の切り換え操作を行うためのボタンが表示される。
【００１６】
前記ボタンを構成するタッチパネル１１８は、ＬＣＤディスプレイ１０６の画面上に縦横に微細に配置された赤外線センサより構成されており、例えば指やタッチペンなどでその赤外線を遮断すると、その遮断した位置が２次元座標値（Ｘ，Ｙ）として検出される。これによって、種々の指示を入力することが可能である。タッチパネル１１８が操作されると、入出力回路１３２内のタッチパネルコントローラ１１９が読み取り、ＣＰＵ１１２はバス１２６を経由してタッチパネルコントローラ１１９にアクセスすることで座標値データを取得することができる。タッチパネルコントローラは、タッチパネル１１８が操作されると、ＣＰＵ１１２の割り込み入力端子であるＩＮＴ＿ＳＷ端子を任意の時間だけアクティブ状態とする。ＣＰＵ１１２は、ＩＮＴ＿ＳＷ端子がアクティブ状態となったときに割り込みを発生し、タッチパネル操作割込み処理（後述）を実行する。
【００１７】
このような構成を持つことにより、本ナビゲーション装置１００は、電源スイッチ１１６がオン状態になると、電源回路１２２から供給される電源電圧がＣＰＵ１１２の動作可能な値になり、発振器１１５の動作が十分安定した後に、リセット回路１１３によりＣＰＵ１１２のリセット状態が解除され、ＲＯＭ１０９に格納されたプログラムの実行が開始される。プログラムはナビゲーション装置の機能を初期化した後に、メイン処理や要因毎の割込み処理からなる通常処理に移行する。例えば、運転者が目的地までの経路案内を指示した場合、次のような処理を実施する。即ち、運転者がＬＣＤディスプレイ１０６上のメニュー画面から経路案内を選択し、ＬＣＤディスプレイ１０６上の地図に基づいてタッチパネル１１８を操作して目的地を入力すると、ＧＰＳ受信機１０２から得られる衛星のデータと地図ディスク１２３の地図情報に基づき車両の現在地が求められ、現在地から目的地までの最適な経路を求める処理が行われる。そして、ＬＣＤディスプレイ１０６上の道路地図に誘導経路を重ねて表示し、必要に応じてスピーカ１０５から音声メッセージを出力して、運転者に適切な経路を案内する。
【００１８】
先ず、本発明のうちの、プログラムの使用開始に関する基準時からの時間経過情報を参照し、その時間経過情報が所定値に達していない場合は、過渡的にプログラムの異常推定結果を無効化するか、プログラムの異常推定の処理自体を実行させないようにする機能について説明する。図２は当該機能を実現するための、プログラムの異常推定の処理自体を実行させない一例である、プログラム実行異常検出許可判定処理のフローチャートである。プログラム実行異常検出許可判定処理は、ナビゲーション装置１００（図１）のプログラムが起動して初期化を終了した後、通常処理に移行する前に実行される。ＦｌａｓｈＲＯＭ１１１（図１）のカレンダ情報記憶領域には、工場出荷時には初期情報（ＮＵＬＬ値：年日時として有り得ない値）が記憶されている。
【００１９】
プログラム実行異常検出許可判定処理に必要な年日時データは、カレンダＩＣ１１７（図１）のデータ、あるいは、ＧＰＳレシーバ１０２（図１）がＧＰＳ衛星から受信したデータを使用する（Ｓ２０１）。次に、ＦｌａｓｈＲＯＭ１１１のカレンダ情報記憶領域の値がＮＵＬＬ値どうか調べる（Ｓ２０２）。ＮＵＬＬ値（工場出荷後の最初の起動時）の場合は、取得した年日時データをＦｌａｓｈＲＯＭ１１１のカレンダ情報記憶領域に書き込む（Ｓ２０３）。また、年日時データに、最初にプログラム実行異常検出処理を実行するまでの期間として、予め設定されている定数データを加算した結果を、ＦｌａｓｈＲＯＭ１１１の実行許可情報記憶領域に書き込む（Ｓ２０４）。ＦｌａｓｈＲＯＭ１１１の各記憶領域のデータは、ナビゲーション装置１００（図１）の電源スイッチ１１６（図１）がオフ状態になっても保持されるので、ナビゲーション装置１００の次回以降の起動時にはＳ２０３，Ｓ２０４は実行されない。
【００２０】
ＦｌａｓｈＲＯＭ１１１（図１）の実行許可情報記憶領域からプログラム実行異常検出処理開始年日時を読み出し（Ｓ２０５）、Ｓ２０１で取得された現在の年日時と比較する（Ｓ２０６）。比較の結果、現在の年日時がプログラム実行異常検出処理開始年日時を経過している場合、つまり、ユーザが本ナビゲーション装置１００（図１）の操作を開始してから一定期間経過した場合には、プログラムの実行異常検出処理を許可する（Ｓ２０７）。逆に、現在の年日時がプログラム実行異常検出処理開始年日時に達していない場合には、プログラムの実行異常検出処理を禁止する（Ｓ２０８）。
【００２１】
なお、プログラム実行異常検出許可判定処理は、メイン処理内において一定周期で実行してもよい。
【００２２】
また、先に説明した、プログラムの使用開始に関する基準時からの時間経過情報を所定値と比較する方法は、現在の年日時とプログラム実行異常検出処理開始年日時とを比較する方法であったが、ナビゲーション装置１００（図１）が起動している間の時間を計測したものを起動時間として積算し、起動時間の積算値と予め設定されている閾値を比較する方法にしてもよい。起動時間の積算は以下のように行う。電源スイッチ１１６（図１）がオン状態になったとき（例えば初期化処理内）に、カレンダＩＣ１１７（図１）から年日時データを読み込む。電源スイッチ１１６がオフ状態になったときに実行されるプログラム終了処理でカレンダＩＣ１１７から年日時データを読み込み、電源スイッチ１１６がオン状態になったときに、読み込んだ年日時データとの差分を求め、結果をＦｌａｓｈＲＯＭ１１１（図１）の起動時間積算値記憶領域（工場出荷時は０）の値に加えた上保存する。この場合は、電源スイッチ１１６がオフ状態になっても直ちにＣＰＵ１１２（図１）あるいはプログラムの動作が停止しないような仕組みとしておく。起動時間を積算するためのデータは、カレンダＩＣ１１７の年日時データを使用する方法の他に、ＣＰＵ１１２内のフリーランカウンタ１１４（図１）のカウンタ値を使用してもよい。
【００２３】
次に、本発明のうちの、スイッチの操作パターンと通常の想定操作パターンとの乖離の程度に基づいてプログラムの異常を推定する、プログラムの実行異常検出処理について説明する。プログラムの実行異常検出は、タッチパネル１１８（図１）を操作することによって起動される、タッチパネル操作割込み処理内で実行される。タッチパネル操作割込み処理は、通常のスイッチ入力処理と、プログラム実行異常検出処理により構成される。図３に、タッチパネル操作割込み処理のフローチャートを示す。
【００２４】
スイッチ入力処理（Ｓ３０１）では、タッチパネル１１８（図１）を操作したときに、ＣＰＵ１１２がバス１２６を経由してタッチパネルコントローラ１１９にアクセスすることで読み取られた座標値の格納や、メイン処理でのスイッチ入力処理を実行させるために要求情報を生成する等の処理を実行する。
【００２５】
ここで、プログラム実行異常検出処理で使用されるバッファについて補足する。Ｘ座標値バッファ，Ｙ座標値バッファは、それぞれ押下されたタッチパネル１１８（図１）のＸ座標値，Ｙ座標値を各Ｎ個（例えば１０個）格納するリングバッファである。リングバッファは、データをバッファの先頭から順次書き込んでいき、バッファの最後までデータを書き込むと、次のデータは再びバッファの先頭から書き込んでいく方法により、バッファの両端を連結することで有限長のバッファを無限長のバッファとして扱うもので、タッチパネル操作情報のように非同期に入力が行われ、保持するデータ量は有限であるという場合に適している。割込間隔バッファは、今回のタッチパネル操作割込み処理処理が実行されたときのフリーランカウンタＦＲＣ１１４（図１）の値（以下、今回割込み発生時刻と称する）と、前回のタッチパネル操作割込み処理処理が実行されたときのフリーランカウンタＦＲＣ１１４の値（以下、前回割込み発生時刻と称する）との差分を格納するＮ＋１個（例えば１１個）のバッファで、これもリングバッファである。これらのＸ座標値バッファ，Ｙ座標値バッファ，割込間隔バッファは、ＲＡＭ１１０（図１）に割り当てられている。また、前回割込み発生時刻は、一定時間タッチパネル操作割り込み処理が発生しない（タッチパネル操作の頻度が小さい）場合には、プログラム実行異常は発生していないと判断して無効データ（ＮＵＬＬ値：時刻として有り得ない値）が書き込まれる。なお、ＮＵＬＬ値の書き込みはメイン処理で実行される。
【００２６】
次のプログラム実行異常検出処理では、最初にプログラム実行異常検出処理を行ってもよいかを調べ（Ｓ３０２）、プログラム実行異常検出処理禁止状態の場合には、プログラム実行異常検出処理をスキップして、タッチパネル操作割込み処理を終了する。プログラム実行異常検出処理許可状態の場合は、タッチパネルコントローラ１１９にアクセスすることで読み取られた座標値情報のうち、Ｘ座標値バッファにＸ座標値，Ｙ座標値バッファにＹ座標値を格納する（Ｓ３０３）。前回割込み発生時刻がＮＵＬＬ値、つまり、タッチパネル１１８（図１）の押下間隔が十分長い場合には、今回割込み発生時刻を前回割込み発生時刻として保存し、タッチパネル操作割込み処理を終了する（Ｓ３０７）。前回割込み発生時刻がＮＵＬＬ値でない場合には、今回割込み発生時刻と前回割込み発生時刻の差分を割込間隔バッファへ格納する（Ｓ３０５）。この今回割込み発生時刻と前回割込み発生時刻の差分を計算することで、前回のタッチパネル操作から今回のタッチパネル操作までの経過時間（タッチパネル操作割込み処理発生間隔）が分かる。
【００２７】
割込間隔バッファに格納されているＮ＋１個の差分値の合計が予め設定されている判定定数ＴＲＥＳＥＴよりも小さく（タッチパネル操作割込み処理発生間隔が短い）、かつ、Ｘ座標値バッファに格納されているＸ座標値（Ｎ個）の最大値と最小値の差が判定定数ＧＸよりも小さく、かつ、Ｙ座標値バッファに格納されているＹ座標値（Ｎ個）の最大値と最小値の差が判定定数ＧＹよりも小さい（タッチパネル１１８（図１）の同じ場所を押している）場合、プログラムの動作は異常であると判定される（Ｓ３０６）。一方、プログラムの動作が正常、即ち、タッチパネル１１８の同じ位置を短時間に何回も押していない場合には、今回割込み発生時刻を前回割込み発生時刻として保存し、タッチパネル操作割込み処理を終了する（Ｓ３０７）。
【００２８】
Ｓ３０６でプログラムの動作が異常であると判定された場合、ＬＣＤディスプレイ１０６（図１）にエラー発生がしたために再起動をする旨を表示するとともに、再起動後のナビゲーション装置１００（図１）の状態について、ユーザに通常の初期状態とするかエラー発生直前の状態とするかを選択してもらうためのメッセージも表示する（Ｓ３０８および図５）。この際に、スピーカ１０５（図１）から音声によるガイダンスメッセージを流してもよい。
【００２９】
再起動後に、ナビゲーション装置１００（図１）の状態をエラー発生直前の状態とするよう選択された場合、ナビゲーション装置１００のエラー発生直前の状態への復旧要求，ナビゲーション装置１００のエラー発生直前の状態に戻すために必要なＲＡＭ１１０（図１）の内容，起動要因がプログラムの実行異常検出処理によるものである旨の情報を、ＦｌａｓｈＲＯＭ１１１（図１）の起動要因記憶領域に記憶する（Ｓ３１０，Ｓ３１１）。その後、ＣＰＵ１１２（図１）はリセット指令出力端子（ＲｅｓｅｔＲｅｑ）をアクティブとし、リセット回路１１３（図１）からのリセット待ち状態とする（Ｓ３１２）。これにより、ナビゲーション装置は再起動される。一方、再起動後のナビゲーション装置１００の状態を通常の初期状態とするよう選択された場合は、ナビゲーション装置１００のエラー発生直前の状態への復旧要求やエラー発生直前の状態を記憶せずに、起動情報がプログラムの実行異常検出処理によるものである旨の情報のみをＦｌａｓｈＲＯＭ１１１の起動要因記憶領域に記憶し（Ｓ３１１）、前述のリセット回路１１３からのリセット待ち状態とする（Ｓ３１２）。
【００３０】
また、前述のプログラムの実行異常検出処理は、プログラム実行異常検出処理禁止状態の場合には処理をスキップしているが、常時プログラム実行異常判定を実施するが、異常を検出してもプログラム実行異常検出処理禁止状態の場合には判定結果を無効化して再起動を行わない、という処理にしてもよい。図４にこの処理のフローチャートを示す。タッチパネル１１８（図１）が操作されて割り込みが発生して、押下されたタッチパネルの座標値情報をＸ座標値バッファ，Ｙ座標値バッファに保存し（Ｓ６０１）、フリーランカウンタＦＲＣ１１４（図１）の値を今回割り込み時刻として保存した後（Ｓ６０２）、前回割込み発生時刻がＮＵＬＬ値の場合には、今回割込み発生時刻を前回割込み発生時刻として保存し、タッチパネル操作割込み処理を終了する（Ｓ６０８）。前回割込み発生時刻がＮＵＬＬ値でない場合には、今回割込み発生時刻と前回割込み発生時刻の差分を割込間隔バッファへ格納する（Ｓ６０４）。Ｘ座標値バッファ，Ｙ座標値バッファと割込間隔バッファ前の内容から、前に述べた方法により異常判定を行う（Ｓ６０５）。異常判定を行った後に、プログラム実行異常検出処理を実行してもよいか調べ（Ｓ６０６）、プログラム実行異常検出処理許可状態の場合は、異常判定結果に従って再起動の処理を行い（Ｓ６０９〜Ｓ６１２）、リセット待ちとする（Ｓ６１３）。
なお、プログラム実行異常と判定されてリセット待ちとなるまでの処理（Ｓ６０９〜Ｓ６１３）は、図３で説明したものと同様である。
【００３１】
前述の説明では、プログラムの実行異常検出処理は、タッチパネル操作割込み処理内で実行しているが、メイン処理内のスイッチ入力処理で実行してもよい。
【００３２】
最後に、プログラムの実行異常検出後のナビゲーション装置１００（図１）の再起動後の復旧処理について説明する。図６に、再起動後の復旧処理のフローチャートを示す。プログラムの実行異常検出後の再起動処理は、電源投入後の通常の起動処理と同様のもので、復旧処理は、初期化処理に引き続いて実行される。初期化処理（Ｓ４０１）終了後に、ＦｌａｓｈＲＯＭ１１１（図１）の起動要因記憶領域を参照し（Ｓ４０２）、起動要因がプログラムの実行異常検出処理による再起動であり（Ｓ４０３）、かつ、再起動前の状態への復旧要求がある場合には（Ｓ４０４）、起動要因記憶領域から再起動前の状態を読み出してＲＡＭ１１０（図１）に書き込み、ナビゲーション装置１００を再起動前の状態に戻して処理を続行する（Ｓ４０５）。このときに、起動要因記憶領域の内容はクリアされる。一方、再起動前の状態への復旧要求がない場合には、ナビゲーション装置１００が通常に起動したときの初期画面を表示する（Ｓ４０６）。
【００３３】
なお、本発明の実施の形態においては、スイッチはタッチパネル式としたが、接点開閉式のスイッチやリモコンのような別形態のスイッチを用いてもよい。また、判定定数ＴＲＥＳＥＴ，ＧＸ，ＧＹは、スイッチの種類毎に設定してもよいし、学習機能を設けてユーザの操作状態によって最適化するようにしてもよい。さらに、前述した方法は、タッチパネル１１８（図１）の同じ位置を短時間に何回も押された場合を想定したが、タッチパネル１１８の押された位置に関係なく、押された間隔と回数のみでプログラムの実行異常を検出する方法や、ナビゲーション装置１００（図１）の通常の操作シーケンスとは異なるスイッチ入力が連続した場合に、プログラムの実行異常と判定する方法を採ってもよい。
【００３４】
以上、本発明の実施の形態を説明したが、これらはあくまで例示にすぎず、本発明はこれらに限定されるものではなく、特許請求の範囲の趣旨を逸脱しない限りにおいて、当業者の知識に基づく種々の変更が可能である。
【図面の簡単な説明】
【図１】本発明の一実施例としてのナビゲーション装置の全体構成を示すブロック図。
【図２】プログラム実行異常検出許可判定処理を説明するフローチャート。
【図３】プログラム実行異常検出処理を説明するフローチャート。
【図４】ナビゲーション装置の再起動時の復旧処理を説明するフローチャート。
【図５】プログラム実行異常検出時のナビゲーション装置の画面表示例。
【図６】プログラム実行異常検出処理の変形例を説明するフローチャート。
【符号の説明】
１００      ナビゲーション装置
１１１      ＦｌａｓｈＲＯＭ
１１２      ＣＰＵ
１１３      リセット回路
１１４      フリーランカウンタ（ＦＲＣ）
１１６      電源スイッチ
１１７      カレンダＩＣ
１１８      タッチパネル
１１９      タッチパネルコントローラ
１３０      バックアップバッテリ
１３２      入出力回路
【図１】
2004240581.tif 000003
【図２】
2004240581.tif 000004
【図３】
2004240581.tif 000005
【図４】
2004240581.tif 000006
【図５】
2004240581.tif 000007
【図６】
2004240581.tif 000008