(57)【要約】      （修正有）【課題】初期プログラムの更新に異常があっても、適切に起動される情報処理装置を提供すること。【解決手段】ナビゲーション装置において、システムリセットにより最初に起動される初期プログラムをブートデバイス２２に２重化して格納し、システムリセットにより、ＣＰＵが出力する初期プログラムへの先頭アクセスアドレスを、フリップフロップ２５を使用した回路により、２重化した初期プログラムのいずれかが選択されるようにした。【選択図】図３
2008181282.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
情報処理装置のパワーオンリセットを含むシステムリセットにより最初に起動されるプログラムを格納する不揮発性メモリ手段と、
前記プログラムを実行するＣＰＵとを備え、
前記不揮発性メモリ手段は、前記プログラムを、少なくとも第１のメモリ領域と第２のメモリ領域に２重化して格納し、
前記ＣＰＵは、前記システムリセットにより前記プログラムへの先頭アクセスアドレスを出力し、
前記システムリセットにより、前記ＣＰＵが出力する前記プログラムへの先頭アクセスアドレスを、前記第１のメモリ領域と前記第２のメモリ領域のいずれかのアドレスとするように選択する選択手段をさらに備えることを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処置装置において、
前記プログラムは、自己のプログラムを更新する更新プログラムを有し、
前記ＣＰＵは、前記選択手段により選択されたメモリ領域の前記プログラムの前記更新プログラムは実行することにより、前記第１のメモリ領域と前記第２のメモリ領域に格納された前記プログラムのうち、前記選択手段により選択されたメモリ領域とは異なるメモリ領域に格納された前記プログラムを更新することを特徴とする情報処理装置。
【請求項３】
請求項１または２に記載の情報処置装置において、
前記ＣＰＵは、前記プログラムを実行することにより、前記選択手段により前記第１のメモリ領域と前記第２のメモリ領域のいずれが選択されているかの選択状態を取得し、前回システム終了時の前記選択状態と比較し、前記選択状態の比較結果に基づき、前記第１のメモリ領域と前記第２のメモリ領域のいずれかの前記プログラムが異常であるかどうか判断することを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処置装置において、
前記ＣＰＵは、前記選択状態を比較した結果一致していると判断する場合、現在選択されているメモリ領域の他方のメモリ領域の前記プログラムが異常であると判断し、現在選択されているメモリ領域の前記プログラムの内容に基づき、前記他方のメモリ領域の前記プログラムの内容を更新することを特徴とする情報処理装置。
【請求項５】
請求項１から４のいずれかに記載の情報処置装置において、
前記選択手段は、前記システムリセットの入力のたびに反転するフリップフロップ回路を有し、前記フリップフロップ回路の出力を、前記ＣＰＵが出力する前記プログラムへの先頭アクセスアドレスの所定のアドレスビットとして使用することにより、前記第１のメモリ領域と前記第２のメモリ領域のいずれかのアドレスとするように選択することを特徴とする情報処理装置。
【請求項６】
請求項１から５のいずれかに記載の情報処置装置において、
前記情報処理装置を制御するシステムプログラムを少なくとも第１のプログラムと第２のプログラムに分け、前記第１のプログラムを前記プログラムとして２重化して前記不揮発性メモリ手段に格納し、前記第２のプログラムは２重化しないで前記不揮発性メモリ手段に格納することを特徴とする情報処理装置。
【請求項７】
情報処置装置におけるプログラム更新方法であって、
情報処置装置のパワーオンリセットを含むシステムリセットにより最初に起動されるプログラムを、不揮発性メモリ手段の少なくとも第１のメモリ領域と第２のメモリ領域に２重化して格納し、
システムリセットにより、前記情報処理装置のＣＰＵが出力する前記プログラムへの先頭アクセスアドレスを、前記第１のメモリ領域と前記第２のメモリ領域のいずれかのアドレスとするように選択し、
前記ＣＰＵが、前記選択されたメモリ領域の前記プログラムを実行することにより、前記第１のメモリ領域と前記第２のメモリ領域に格納された前記プログラムのうち、前記選択されたメモリ領域とは異なるメモリ領域に格納された前記プログラムを更新することを特徴とするプログラム更新方法。
【請求項８】
情報処置装置におけるプログラムリカバリ方法であって、
情報処置装置のパワーオンリセットを含むシステムリセットにより最初に起動されるプログラムを、不揮発性メモリ手段の少なくとも第１のメモリ領域と第２のメモリ領域に２重化して格納し、
システムリセットにより、前記情報処理装置のＣＰＵが出力する前記プログラムへの先頭アクセスアドレスを、前記第１のメモリ領域と前記第２のメモリ領域のいずれかのアドレスとするように選択し、
前記ＣＰＵが、前記選択されたメモリ領域の前記プログラムを実行することにより、前記第１のメモリ領域と前記第２のメモリ領域のいずれが選択されているかの選択状態を取得し、前回システム終了時の前記選択状態と比較し、前記選択状態の比較結果に基づき、前記第１のメモリ領域と前記第２のメモリ領域のいずれかの前記プログラムが異常であるかどうかを判断することを特徴とするプログラムリカバリ方法。
【請求項９】
請求項８に記載の情報処置装置におけるプログラムリカバリ方法において、
前記選択状態を比較した結果一致していると判断する場合、現在選択されているメモリ領域の他方のメモリ領域の前記プログラムが異常であると判断し、現在選択されているメモリ領域の前記プログラムの内容に基づき、前記他方のメモリ領域の前記プログラムの内容を更新することを特徴とするプログラムリカバリ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、起動時のプログラムを２重にした情報処理装置に関する。
【背景技術】
【０００２】
システムを起動する場合、起動デバイス（フラッシュメモリ等）に起動プログラムが入っており、ＣＰＵはそのプログラムを読み出し実行することによりシステムの起動を行っている。フラッシュメモリに書き込まれたプログラムは、プログラムの修正等により書き換えられることがあり、プログラム自身に書き換えプログラムを組み込んでおき、外部メモリ等を利用してプログラムの書き換えを行っている。
【０００３】
フラッシュメモリの書き換えに関する技術として、特許文献１に記載された技術がある。例えば、書き換えに失敗した場合に２重化されたプログラムを起動し、書き換えに失敗したプログラムの修復を行っている。
【０００４】
【特許文献１】特開２００２−２５９１５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、特許文献１の技術では、システムの初期化プログラム自体は正常に動作するということが前提とされており、初期化プログラム自体の書き換えについては考えられていない。すなわち、初期化以降のプログラムまたはデータの書き換え失敗時についてのみ考えられている技術である。
【０００６】
しかしながら、初期化プログラムを書き換える必要が生じることもあり、初期化プログラムの書き換えに失敗することもある。このように初期化プログラムの書き換えに失敗した場合、従来の技術では、起動プログラムを再起動することが出来ない状態に陥る欠点があった。その結果、フラッシュメモリを基板から取り外して初期化プログラム等の書き換えを行ったりする必要があり、非常に煩わしい作業が必要となっていた。
【課題を解決するための手段】
【０００７】
請求項１の発明は、情報処理装置に適用され、情報処理装置のパワーオンリセットを含むシステムリセットにより最初に起動されるプログラムを格納する不揮発性メモリ手段と、プログラムを実行するＣＰＵとを備え、不揮発性メモリ手段は、プログラムを、少なくとも第１のメモリ領域と第２のメモリ領域に２重化して格納し、ＣＰＵは、システムリセットによりプログラムへの先頭アクセスアドレスを出力し、システムリセットにより、ＣＰＵが出力するプログラムへの先頭アクセスアドレスを、第１のメモリ領域と第２のメモリ領域のいずれかのアドレスとするように選択する選択手段をさらに備えることを特徴とするものである。
請求項２の発明は、請求項１に記載の情報処置装置において、プログラムは、自己のプログラムを更新する更新プログラムを有し、ＣＰＵは、選択手段により選択されたメモリ領域のプログラムの更新プログラムは実行することにより、第１のメモリ領域と第２のメモリ領域に格納されたプログラムのうち、選択手段により選択されたメモリ領域とは異なるメモリ領域に格納されたプログラムを更新することを特徴とするものである。
請求項３の発明は、請求項１または２に記載の情報処置装置において、ＣＰＵは、プログラムを実行することにより、選択手段により第１のメモリ領域と第２のメモリ領域のいずれが選択されているかの選択状態を取得し、前回システム終了時の選択状態と比較し、選択状態の比較結果に基づき、第１のメモリ領域と第２のメモリ領域のいずれかのプログラムが異常であるかどうか判断することを特徴とするものである。
請求項４の発明は、請求項３に記載の情報処置装置において、ＣＰＵは、選択状態を比較した結果一致していると判断する場合、現在選択されているメモリ領域の他方のメモリ領域のプログラムが異常であると判断し、現在選択されているメモリ領域のプログラムの内容に基づき、他方のメモリ領域のプログラムの内容を更新することを特徴とするものである。
請求項５の発明は、請求項１から４のいずれかに記載の情報処置装置において、選択手段は、システムリセットの入力のたびに反転するフリップフロップ回路を有し、フリップフロップ回路の出力を、ＣＰＵが出力するプログラムへの先頭アクセスアドレスの所定のアドレスビットとして使用することにより、第１のメモリ領域と第２のメモリ領域のいずれかのアドレスとするように選択することを特徴とするものである。
請求項６の発明は、請求項１から５のいずれかに記載の情報処置装置において、情報処理装置を制御するシステムプログラムを少なくとも第１のプログラムと第２のプログラムに分け、第１のプログラムをプログラムとして２重化して不揮発性メモリ手段に格納し、第２のプログラムは２重化しないで不揮発性メモリ手段に格納することを特徴とするものである。
請求項７の発明は、情報処置装置におけるプログラム更新方法に適用され、情報処置装置のパワーオンリセットを含むシステムリセットにより最初に起動されるプログラムを、不揮発性メモリ手段の少なくとも第１のメモリ領域と第２のメモリ領域に２重化して格納し、システムリセットにより、情報処理装置のＣＰＵが出力するプログラムへの先頭アクセスアドレスを、第１のメモリ領域と第２のメモリ領域のいずれかのアドレスとするように選択し、ＣＰＵが、選択されたメモリ領域のプログラムを実行することにより、第１のメモリ領域と第２のメモリ領域に格納されたプログラムのうち、選択されたメモリ領域とは異なるメモリ領域に格納されたプログラムを更新することを特徴とするものである。
請求項８の発明は、情報処置装置におけるプログラムリカバリ方法に適用され、情報処置装置のパワーオンリセットを含むシステムリセットにより最初に起動されるプログラムを、不揮発性メモリ手段の少なくとも第１のメモリ領域と第２のメモリ領域に２重化して格納し、システムリセットにより、情報処理装置のＣＰＵが出力するプログラムへの先頭アクセスアドレスを、第１のメモリ領域と第２のメモリ領域のいずれかのアドレスとするように選択し、ＣＰＵが、選択されたメモリ領域のプログラムを実行することにより、第１のメモリ領域と第２のメモリ領域のいずれが選択されているかの選択状態を取得し、前回システム終了時の選択状態と比較し、選択状態の比較結果に基づき、第１のメモリ領域と第２のメモリ領域のいずれかのプログラムが異常であるかどうかを判断することを特徴とするものである。
請求項９の発明は、請求項８に記載の情報処置装置におけるプログラムリカバリ方法において、選択状態を比較した結果一致していると判断する場合、現在選択されているメモリ領域の他方のメモリ領域のプログラムが異常であると判断し、現在選択されているメモリ領域のプログラムの内容に基づき、他方のメモリ領域のプログラムの内容を更新することを特徴とするものである。
【発明の効果】
【０００８】
本発明によれば、システムリセットにより最初に起動されるプログラムを不揮発性メモリ手段に２重化して格納するようにしたので、そのプログラムの更新をする場合に異常があっても、情報処理装置が起動しなくなってしまうということがなくなる。
【発明を実施するための最良の形態】
【０００９】
図１は、本発明の情報処理装置の一実施の形態であるナビゲーション装置１の構成を示す図である。ナビゲーション装置１は、制御装置２、現在地検出装置３、地図データ記憶装置４、表示装置５、入力装置６などから構成される。制御装置２は、現在地検出装置３で検出された車両の現在地情報や、入力装置６を介して入力された目的地情報や、地図データ記憶装置４に格納された地図データなどを使用して、道路地図の表示、経路探索、経路誘導等の各種のナビゲーション処理を行う。道路地図や経路や各種の情報は、表示装置５に表示される。
【００１０】
制御装置２は、ＣＰＵ２１、ブートデバイス２２、メモリ２３、その他の周辺回路２４などから構成され、ブートデバイス２２に格納されたナビゲーション用システムプログラム（以下、システムプログラムと言う）を実行することにより、各種のナビゲーション処理を行う。具体的には、ＣＰＵ２１がシステムプログラムを実行する。
【００１１】
ブートデバイス２２は、例えばフラッシュメモリで構成される書き換え可能な不揮発性ＲＯＭである。本実施の形態では、システムプログラム全体がブートデバイス２２に格納されているとして説明する。しかし、システムプログラムのうち、起動時に使用する一部をブートデバイス２２に格納し、その他のプログラムは他のＲＯＭ（不図示）やハードディスクなどの記憶装置（不図示）などに格納するようにしてもよい。
【００１２】
本実施の形態では、システムプログラムのうち、起動時に最初に実行する初期化プログラム等を初期プログラムと言い、この初期プログラムを２重化してブートデバイスに格納する。本実施の形態では、このように２重化された初期プログラムが、起動毎（リセットが入力される毎）に交互に起動されるように構成した。
【００１３】
これにより、初期プログラムを新しい初期プログラムに書き換え（更新）を行う場合、万が一書き換えに失敗しても、もう片方のメモリ領域に旧初期プログラムが格納されているので、システムの再起動を行うことができる。すなわち、本実施の形態では、初期プログラムが２重化されているので、初期プログラムを変更しても、システムがまったく起動しなくなってしまうという状態に陥ることはない。以下、これを実現する本実施の形態の構成について詳細に説明する。
【００１４】
図２は、本実施の形態におけるブートデバイス２２に格納されるプログラムのメモリ配置図を示す図である。本実施の形態では、システムプログラムを最低２つに分割する。ＣＰＵ２１の初期設定（システムの初期化）などを行う初期化プログラム、プログラムローダ、更新（書き換え）プログラム等を初期プログラム１とし、残りのプログラムをアプリケーションプログラム２とする。
【００１５】
本実施の形態では、初期プログラム１の大きさは１ＫＢ以内とし、ブートデバイス２２のアドレス０ｘ００００番地から始まる領域に初期プログラム１−１、アドレス０ｘ０４００番地から始まる領域に初期プログラム１−２が書き込まれる。初期プログラム１−１と初期プログラム１−２は全く同じ内容であり、同じ内容のプログラムを２箇所に書き込まれることにより２重化されている。どちらの領域の初期プログラム１が実行されても同じ内容の処理が行われる。
【００１６】
ブートデバイス２２のアドレス０ｘ０８００番地から始まる領域にはアプリケーションプログラム２が書き込まれる。初期プログラム１には、最後の命令に０ｘ０８００番地にジャンプする命令がコンパイルされ、初期プログラム１の処理に引き続きアプリケーションプログラム２が実行される。
【００１７】
なお、本実施の形態では、初期プログラム１とアプリケーションプログラム２と分けているが、この分け方は必ずしも厳密に考える必要はない。初期プログラム１には最低限システムのリセット後に最初に実行されるプログラムを含むようにし、アプリケーションプログラム２はその後に処理されるプログラムを適宜アプリケーションプログラムとして含むようにすればよい。
【００１８】
本実施の形態では、初期プログラム１には、前述したように、システムプログラムを更新する更新プログラムが含まれる。更新プログラムは、アプリケーションプログラム２を更新するプログラムとともに、初期プログラム１自身を更新する（書き換える）プログラムも含まれている。
【００１９】
図３は、２重化された初期プログラム１を、起動毎（リセットが入力される毎）に交互に、すなわち、初期プログラム１−１と初期プログラム１−２を交互に起動するための構成を示す図である。
【００２０】
図３において、Ｒｅｓｅｔ信号が入力されるたびにフリップフロップ（Ｆ／Ｆ）２５の出力Ｑの１／０が入れ替わる。フリップフロップ２５の出力ＱとＣＰＵ２１のＧＰＯ（プルアップ付き）をＡＮＤ２６でＡＮＤし、ＡＮＤ２６の出力とＣＰＵ２１から出力されるアドレスビットＡ１０＿ＣＰＵとをＯＲ２７でＯＲし、ＯＲ出力をブートデバイス２２へのＡ１０＿ＭＥＭ信号とする。
【００２１】
Ｒｅｓｅｔ信号は、ナビゲーション装置１の電源オンにより出力されるパワーオンリセット信号、ナビゲーション装置１のリセットスイッチ（不図示）が押されることにより出力されるリセット信号などを含む信号である。すなわち、ナビゲーション装置１のシステムがリセットされる毎に生成されるシステムリセット信号である。フリップフロップ２５は、Ｒｅｓｅｔ信号が入力されるごとに交互にオンオフを繰り返すように構成されている。フリップフロップ２５の電源はバッテリバックアップされ、オンオフ状態はナビゲーション装置１の電源がオフされても保持される。
【００２２】
Ｒｅｓｅｔ信号は、ＣＰＵ２１にも入力される。ＣＰＵ２１は、Ｒｅｓｅｔ信号が入力されると、最初に実行すべきプログラムのアドレスをアドレス端子Ａ０〜Ａ１１に出力する。本実施の形態では、最初に初期プログラム１を実行すべくアドレス０ｘ００００を出力する。ＣＰＵ２１のＧＰＯ端子は汎用出力端子であり、Ｒｅｓｅｔ信号でＣＰＵ２１がリセットされると出力はハイインピーダンスになる。従って、出力がプルアップされているので、ＡＮＤ２６への入力はＨｉｇｈとなる。
【００２３】
このような構成で、Ｒｅｓｅｔ信号が入力されると、そのたびにフリップフロップ２５の出力Ｑの１／０が入れ替わり、Ａ１０＿ＭＥＭ信号も１／０が交互に入れ替わる。その結果、ブートデバイス２２に入力されるアドレスは、０ｘ００００番地と０ｘ０４００番地と交互に入力される。これにより、０ｘ００００番地からの初期プログラム１−１の読み出しと、０ｘ０４００番地からの初期プログラム１−２の読み出しとが、Ｒｅｓｅｔ信号が入力されるたびに交互に行われるようになる。
【００２４】
初期プログラム１は、アプリケーションプログラム２へジャンプする直前に、ＧＰＯの出力を０にする命令を実行する。これにより、ＡＮＤ２６の出力を０にしてブートデバイス２２へのＡ１０＿ＭＥＭ信号がＣＰＵ２１からのＡ１０＿ＣＰＵ信号のレベルが出力されるようにする。この処理を行うことにより起動プログラム１−１、起動プログラム１−２のどちらから起動しても起動プログラム２を起動することができる。
【００２５】
なお、ＣＰＵ２１は、内部にキャッシュメモリ（不図示）を有し、ブートデバイス２２からのデータ（プログラム）をいったんキャッシュメモリに格納し、キャッシュメモリにアクセスしながらプログラムの実行を行う。従って、ＧＰＯの出力を０にすることによってフリップフロップ２５の出力はブロックされるが、そのときには、一連の命令はすでにＣＰＵ２１のキャッシュメモリに格納されているので、初期プログラム１の実行において特に問題は生じない。また、キャッシュメモリの代わりに、プログラムをブートデバイス２２から高速ＲＡＭに転送するようにしてもよい。このようにしても、ＧＰＯの出力を０にすることによる初期プログラム１の実行の問題は生じない。
【００２６】
ＣＰＵ２１のＧＰＩ端子は、汎用入力端子であり、フリップフロップ２５の出力Ｑを入力する。すなわち、ＣＰＵ２１はフリップフロップ２５の出力Ｑの状態をモニタすることができる。
【００２７】
次に、システムプログラムの更新方法について説明する。前述したように、初期プログラム１には、初期プログラム１やアプリケーションプログラム２を更新する（書き換える）更新プログラムが組み込まれている。更新プログラムの起動は、ナビゲーション装置１のメニュー画面からの指定やプログラム更新用の専用スイッチ（不図示）の操作などにより行われるものとする。
【００２８】
アプリケーションプログラム２の更新は、単純に、外部メモリ等に格納された新アプリケーションプログラムを読み込んで、アプリケーションプログラム２が格納される領域、本実施の形態では０ｘ０８００番地から順次書き込んでいく。一方、初期プログラム１の更新は、以下の通りに行う。
【００２９】
図４は、初期プログラム１の更新プログラムのフローチャートを示す図である。図４の処理は、ナビゲーション装置１のメニュー画面や初期プログラム１更新用の専用スイッチ（不図示）の操作などにより初期プログラム１の更新が選択されると起動されるものとする。
【００３０】
ステップＳ１では、フリップフロップ２５の出力ＱをＣＰＵ２１のＧＰＩ端子を介してモニターし確認する。あるいは、ＧＰＩの入力結果をレジスタやメモリ等に保持しておいて、その内容を確認するようにしてもよい。このようにすることにより、どちらの初期プログラム１（初期プログラム１−１ｏｒ初期プログラム１−２）が起動されたか、確認することができる。
【００３１】
ステップＳ２では、外部メモリ等に格納された初期プログラム１の更新用の新プログラムを読み込んで、今回起動されなかった方の初期プログラム１の先頭番地から順次書き込んでいく。これにより、今回起動された初期プログラム１の他方のメモリ領域の初期プログラム１が更新される。更新処理プログラムはこれで終了する。
【００３２】
ブートデバイス２２の一方のメモリ領域の初期プログラム１の更新が終了すると、ユーザは、ナビゲーション装置１を再起動し、初期プログラム１の更新を再度選択し、図４の処理を再度実行させる。このとき、再起動により起動される初期プログラム１は、前回の起動時とは異なるブートデバイス２２の領域に格納された初期プログラム１である。すなわち、更新され新しくなった初期プログラム１が起動される。
【００３３】
更新後の初期プログラム１にも、同様に更新プログラムが組み込まれているので、同様な操作を行えば、ブートデバイス２２のもう一方の領域に格納されている初期プログラム１も更新される。このとき、ユーザは、どちらの領域の初期プログラム１を更新するかは意識する必要はない。単純に、初期プログラム１の更新を指示したのち、再起動を行い、再度、初期プログラム１の更新を指示するだけでよい。以上により、２重化されたプログラムの両方が確実に更新される。
【００３４】
次に、初期プログラム１が破壊されていた場合のリカバリ方法について説明する。本実施の形態では、システムプログラム終了時に、どちらの初期プログラム１（初期プログラム１−１あるいは初期プログラム１−２）から起動したか、レジスタ／メモリ等に起動フラグとして保持しておく。
【００３５】
そして、Ｒｅｓｅｔ信号によるシステム起動時ごとに保持されている起動フラグをリードし、前回どちらから起動したか確認する。更に今回の起動がどちらからかを確認し、異なっていれば正常と判断し起動処理を続ける。もし同じ初期プログラム１から起動している場合、２重化されているもう片方の初期プログラム１の異常と判断し、データのコンベア・書き換え処理を行うようにする。
【００３６】
通常、破壊されている初期プログラム１を使用してシステムプログラムを起動しようとしても、システムプログラムが起動されず、ナビゲーション装置１は立ち上がらない。ユーザは、ナビゲーション装置１が立ち上がらないという異常に気がつくと、リセットや電源のオフオンなどを行い、再度、ナビゲーション装置１を立ち上げようとする。このとき、２回目の起動では、破壊されている初期プログラム１とは異なるもう一方の初期プログラム１が起動され、正常に立ち上がる。この場合に、起動フラグに格納された情報による初期プログラム１と今回起動された初期プログラム１とが同じであることが確認されるので、片方の初期プログラム１に異常があることが検出される。
【００３７】
図５は、本実施の形態のシステムプログラムのリカバリ処理部分を抽出した処理についてのフローチャートを示す図である。図５のフローは、Ｒｅｓｅｔ信号がＣＰＵ２１に入力されることにより開始する。
【００３８】
ステップＳ１１では、初期プログラム１が実行を開始する。この時点では、初期プログラム１−１あるいは初期プログラム１−２のいずれかの初期プログラム１が実行されているかは分からない。次に、ステップＳ１２において、ＣＰＵ２１のＧＰＩの入力を介して、フリップフロップ２５の出力Ｑの状態を取得し、いずれの初期プログラム１が起動されたかを確認する。
【００３９】
ステップＳ１３では、起動フラグをリードする。ステップＳ１４では、ステップＳ１２で確認されたいずれの初期プログラム１が起動されたかの情報とステップＳ１２でリードした起動フラグの情報とを比較する。すなわち、今回起動された初期プログラム１と前回のシステム終了時のシステムプログラムの起動時の初期プログラム１とが、ブートデバイス２２の同じ領域のものかを比較する。同じであればいずれか片方の初期プログラム１に異常があると判断してステップＳ１５に進み、異なっていれば異常はないと判断してステップＳ１６に進む。
【００４０】
ステップＳ１５では、今回起動された初期プログラム１とは異なるブートデバイス２２の領域に格納された初期プログラム１を、今回起動された初期プログラム１のブートデバイス２２に格納された内容と比較を行い、異なる部分を破壊されている部分として検出し今回起動された初期プログラム１の対応するブートデバイス２２の内容で書き換える。なお、特に比較を行わず、今回起動された初期プログラム１とは異なるブートデバイス２２の領域に格納された初期プログラム１を、今回起動された初期プログラム１のブートデバイス２２に格納された内容で、全体を書き換えてもよい。
【００４１】
ステップＳ１６では、いずれの初期プログラム１にも異常がないと判断できるので、アプリケーションプログラム２の実行を開始する。特にシステムの終了要求があるまで、アプリケーションプログラム２の種々の処理が継続して行われる。
【００４２】
ステップＳ１７では、システムの終了要求があったかどうか判断され、要求がない場合はステップＳ１６に戻り処理を繰り返す。システムの終了要求があった場合は、ステップＳ１８に進む。システムの終了要求は、ナビゲーション装置１の電源オフの操作やリセット操作などにより要求される。
【００４３】
ステップＳ１８では、今まで実行されていたシステムプログラムが、どちらの初期プログラム１（初期プログラム１−１あるいは初期プログラム１−２）から起動したかの情報を、レジスタ／メモリ等に起動フラグとして記録する。これは、ＧＰＩを介してフリップフロップ２５の出力Ｑを入力することにより判断することができる。このレジスタ／メモリ等は、ナビゲーション装置１が電源オフしても、データが消えないようバッテリーバックアップされている。
【００４４】
以上説明した本実施の形態によれば、以下のような作用効果を得ることができる。
（１）初期プログラム１を２重化して格納するようにしたので、初期プログラム１の更新をする場合に異常があっても、ナビゲーション装置１のシステムが起動しなくなってしまうということがなくなる。
【００４５】
（２）Ｒｅｓｅｔ信号を使用して、２重化した初期プログラム１を選択的に選択できる回路を設けるようにしたので、２重化した初期プログラム１をＣＰＵ２１の外部回路で確実に選択できるようにすることができる。その結果、プログラムがハングし、ナビゲーション装置１のシステムが立ち上がらないというような状態を確実に回避することができる。特に、１つのフリップフロップ２５と２個のゲート回路２６、２７という簡単な構成で上記回路を構築するので、コストがかからず、装置の規模も大きくならず、上記の機能を実現できる。
【００４６】
（３）２重化した初期プログラム１を選択的に交互に選択できるようにしたので、いずれかの初期プログラム１に異常があっても、次の再起動時には、単に再起動させるだけで確実に再起動が成功する。
【００４７】
（４）初期プログラム１の更新において、選択されたメモリ領域の初期プログラム１を実行させることにより、選択されたメモリ領域とは異なるメモリ領域に格納された初期プログラム１を更新するので、確実に初期プログラム１を更新することができる。また、選択されるメモリ領域はリセットごとに自動的に交互に選択されるので、初期プログラム１の更新においても、どちらのメモリ領域の初期プログラム１を更新させるかなど、ユーザは全く気にする必要もない。
【００４８】
（５）２重化した初期プログラム１のいずれかに異常があっても、ほぼ自動的にそれを判別することができ、自動的に異常初期プログラム１をリカバリすることができる。すなわち、ナビゲーション装置１が立ち上がらないなどの異常を発生したときに、ユーザは、ナビゲーション装置１を再起動を行うだけで上記の異常を発見し、リカバリすることができる。
【００４９】
（６）２重化するプログラムと２重化しないプログラムを分けたので、２重化するプログラムのサイズを任意に決定することができ、初期プログラム１の処理内容を自由に決定することができる。その結果、処理の効率とコストのバランスを適切に選択することができる。
【００５０】
―変形例―
（１）なお、上記では、ナビゲーション装置１の例で説明したが、ナビゲーション装置１に限定する必要はない。各種の情報を処理する情報処理装置全般に本発明を適用することができる。
【００５１】
（２）ブートデバイス２２としては、フラッシュメモリの例で説明したが、フラッシュメモリに限定する必要はない。書き換え可能な不揮発性メモリであればどのようなものでもよい。
【００５２】
（３）上記では２重化するメモリサイズを１ＫＢ以内としたが、必ずしもこのサイズに限定する必要はない。もっと、大きなサイズでもよいし、もっと小さなサイズでもよい。ただし、アドレス１ビットの選択だけで２重化プログラムのいずれかのメモリ領域を選択できるようにするのが好ましい。ただし、これも必ずしもアドレス１ビットに限定する必要もない。
【００５３】
上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【００５４】
以下、請求項の構成要素と上記実施の形態の構成要素との対応付けについて説明する。本発明の不揮発性メモリ手段はブートデバイス２２に対応し、ＣＰＵはＣＰＵ２１に対応し、選択手段はフリップフロップ２５、ＡＮＤ２６、ＯＲ２７に対応する。なお、この対応付けの説明はあくまで一例であり、本発明はこの対応付けに限定して解釈されるものではない。
【図面の簡単な説明】
【００５５】
【図１】本発明の情報処理装置の一実施の形態であるナビゲーション装置１の構成を示す図である。
【図２】本実施の形態におけるブートデバイス２２に格納されるプログラムのメモリ配置図を示す図である。
【図３】２重化された初期プログラム１を、起動毎に交互に起動するための構成を示す図である。
【図４】初期プログラム１の更新プログラムのフローチャートを示す図である。
【図５】本実施の形態のシステムプログラムのリカバリ処理部分を抽出した処理についてのフローチャートを示す図である。
【符号の説明】
【００５６】
１  ナビゲーション装置
２  制御装置
３  現在地検出装置
４  地図データ記憶装置
５  表示装置
６  入力装置
２１  ＣＰＵ
２２  ブートデバイス
２３  メモリ
２４  周辺回路
【図１】
2008181282.tif 000003
【図２】
2008181282.tif 000004
【図３】
2008181282.tif 000005
【図４】
2008181282.tif 000006
【図５】
2008181282.tif 000007