JP2004348546A - 制御プログラム切替え装置及びその方法 - Google Patents
制御プログラム切替え装置及びその方法 Download PDFInfo
- Publication number
- JP2004348546A JP2004348546A JP2003146221A JP2003146221A JP2004348546A JP 2004348546 A JP2004348546 A JP 2004348546A JP 2003146221 A JP2003146221 A JP 2003146221A JP 2003146221 A JP2003146221 A JP 2003146221A JP 2004348546 A JP2004348546 A JP 2004348546A
- Authority
- JP
- Japan
- Prior art keywords
- control program
- program
- consistency
- control
- boot
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000012795 verification Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 description 21
- 238000012545 processing Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 4
- 230000004913 activation Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】本発明は、通常実行される制御プログラムに何らかの障害が発生した場合に、緊急用に用意された別の制御プログラムを自動的に実行することのできる、制御プログラム切替え装置及びその方法を提供することを目的とする。
【解決手段】CPUをブートするためのブートプログラムと、前記ブートプログラムで起動される動作可能な複数の制御プログラムとを保持する保持手段と、前記制御プログラムの少なくとも1つの整合性を検証する手段と、前記検証手段で前記制御プログラムの少なくとも1の整合性が検証されなかった場合、前記保持手段に保持された複数の制御プログラムのうち他の制御プログラムに切り替える切替え手段とを有することにより上述の課題を実現する。
【選択図】 図2
【解決手段】CPUをブートするためのブートプログラムと、前記ブートプログラムで起動される動作可能な複数の制御プログラムとを保持する保持手段と、前記制御プログラムの少なくとも1つの整合性を検証する手段と、前記検証手段で前記制御プログラムの少なくとも1の整合性が検証されなかった場合、前記保持手段に保持された複数の制御プログラムのうち他の制御プログラムに切り替える切替え手段とを有することにより上述の課題を実現する。
【選択図】 図2
Description
【0001】
【発明の属する技術分野】
本発明は制御プログラム切替え装置及びその方法に関し、例えば複数の制御プログラムを備えたシステムにおける制御プログラム切替え装置及びその方法に関する。
【0002】
【従来の技術】
従来のCPUを備えるシステムにおける制御プログラムは、ROM領域内で単一しか保持されず、ブートプログラムからは既定の制御プログラムが実行されていた。
【0003】
【発明が解決しようとしている課題】
しかしながら、何らかの原因により制御プログラムに障害が発生した場合、代替手段が存在しないため、そのシステムは動作不可能な状態に陥ってしまう。
【0004】
その場合、ROMに保持された制御プログラムを書き換えることが必要となるが、ROMライターで書き換える場合にはROMを取り外す必要があり、基板上に実装されたROMであれば取り外しに多くの労力が必要となる。仮にROMの取り外しを予め想定するのであれば、取り外しの容易なソケット上にROMを取り付ける方法が考えられるが、この場合基盤のコストが上昇するという問題がある。
【0005】
もしROMライターを使用せずに障害に対処しようとした場合には、基盤の交換が必要となってしまい、システムの修復に要するコストはさらに増大することとなる。
【0006】
本発明は上述した課題を解決するためになされたものであり、通常実行される制御プログラムに何らかの障害が発生した場合に、緊急用に用意された別の制御プログラムを自動的に実行することのできる、制御プログラム切替え装置及びその方法を提供することを目的とする。
【0007】
【問題を解決するための手段】
上述した目的を達成するため、本発明は、即ち、CPUをブートするためのブートプログラムと、前記ブートプログラムにより動作可能な複数の制御プログラムとを保持する保持手段と、前記制御プログラムの整合性を検証する手段と、前記保持手段に保持された複数の制御プログラムを切り替える切替え手段とを有することを特徴とする。
【0008】
上述した目的を達成するため、本発明は、例えば、前記保持手段はROMであることを特徴とする。
【0009】
上述した目的を達成するため、本発明は、例えば、前記保持手段に保持された制御プログラムのうち、1つは通常使用される既定制御プログラムであることを特徴とする。
【0010】
上述した目的を達成するため、本発明は、例えば、前記保持手段に保持された制御プログラムのうち、前記既定制御プログラムを除いたうちの1つは前記既定制御プログラムが機能しない場合にのみ使用される、冗長制御プログラムであることを特徴とする。
【0011】
上述した目的を達成するため、本発明は、例えば、前記ブートプログラムは、前記制御プログラムの整合性を検証する手段を実行し、前記既定制御プログラムの整合性が保証されない場合に、前記プログラム切替え手段を実行し、前記冗長制御プログラムを実行することを特徴とする。
【0012】
上述した目的を達成するため、本発明は、例えば、前記保持手段は、前記複数の制御プログラムにおける、それぞれの実行開始アドレスを保持することを特徴とする。
【0013】
上述した目的を達成するため、本発明は、例えば、前記制御プログラム切替え手段は、前記整合性を検証する手段の実行結果により、保持された前記実行開始アドレスを前記CPUのプログラムカウンタに書き込むことで制御プログラムを実行することを特徴とする。
【0014】
上述した目的を達成するため、本発明は、前記制御プログラム切替え手段は、前記既定制御プログラムの整合性が保証された場合であっても、前記既定制御プルグラムの前回の実行結果により、前記冗長制御プログラムに切り替えることを特徴とする。
【0015】
上述した目的を達成するため、本発明は、例えば、単一のブートプログラムに対して、複数の制御プログラムを保持し、ブートプログラムにより制御プログラムの整合性検証を行い、検証結果に基づいて適切な制御プログラムを選択し、切り替えて実行することを特徴とする。
【作用】
以上の構成により、通常実行される制御プログラムに何らかの障害が発生した場合に、別の制御プログラムを自動的に実行し、同等の機能を実現する、もしくは機能を制限した緊急用プログラムを実行し、最低限の機能を実現することが可能となる。
【0016】
【実施例】
以下、図面を参照して本発明に係る一実施例を詳細に説明する。
(第一の実施例)
図1は本発明を実現するために必要なハードウェア構成のブロック図である。
【0017】
図1において、CPU 101はメモリに記憶されているプログラムに基づいて制御・処理を実行する。FLASH ROM 102は、プログラムなどを記憶する。RAM 103a、RAM 104bは、プログラムやデータなどを記憶する。それぞれは、バスを介して接続されていおり、FLASH ROM 102は論理アドレス0hに割り当てられている。RAM 103a及びRAM 104aは、CPU 101からは連続した1個の領域として認識され、論理アドレスC000000hに割り当てられているものとする。CPU 101はプログラムを実行し、FLASH ROM 102にはシステムの制御に必要な各種プログラム及び後述する図3,4、6に示すフローに対応するブートプログラムが格納されている。
RAM 103a、RAM 103bは、CPU 101が前述のプログラムを実行する際のワークメモリとして使用される他、FLASH ROM 102と比較してアクセス速度が高速なことから、FLASH ROM 102に格納された前述のプログラムをコピーしておくことでプログラムのRead/Writeに必要な時間を短縮し、システムを高速に動作させる役割も持つ。
【0018】
本実施例においては1個のCPU、1個のFLASH ROM、2個のRAMを備えているが、本発明を適用するシステムの規模により、その個数は変動する場合がある。尚、図1においては本実施例に関係する構成のみを抜粋しており、例えば画像を記録するプリンタのようなシステムに本発明を適用する場合には、これらの他に、画像保持用メモリ、モータ及びモータドライバ、各種センサ、記録用ヘッド、ホストPCとのインターフェース制御部等の各種デバイスが必要となる。
【0019】
図2はFLASH ROM 102の物理アドレスに対するプログラムの格納状態を示したメモリマップである。本実施例におけるシステムには2MByteのFLASH ROMが装備されているものとする。FLASH ROM 102のボトム部(物理アドレス:0h)には32KByteのブートプログラム201が、物理アドレス6000hからは224KByteの非常用制御プログラム202が、物理アドレス40000hからは1792KByteの通常用制御プログラム203が格納されている。各プログラムの容量、格納アドレスについてはシステムにより異なり、この他に各種の設定情報を記録しておくための箇所を追加してもよい。各プログラムの先頭物理アドレスは、ブートプログラム201内にテーブルとして保存されており、ブートプログラム実行中はいつでも参照することが可能である。
【0020】
ブートプログラム201は、起動処理に必要なCPU 101のI/Oポート、メモリコントローラの初期化、FLASH ROM 102の内容をRAMへコピーする機能、各制御プログラムのSUMチェック機能、及びブートプログラム201から通常用制御プログラム203、もしくは非常用制御プログラム202に処理を移行させる機能等を持つ。
【0021】
通常用制御プログラム203はシステム全体の制御を行う、いわばメインのプログラムである。先ほどと同様にプリンタに本発明を適用したとして説明すると、センサの監視、モータ制御、記録ヘッド制御等、プリンタとしての機能を実現するためのプログラムは全て通常用制御プログラム203に収められている。
【0022】
非常用制御プログラム202は、FLASH ROM102の容量に十分余裕がある場合には通常用制御プログラム203と全く同じ内容で良いが、本実施例においては容量の制限から、障害の発生している通常用制御プログラム203を書き換えるだけの機能を持つものとする。これが例えばプリンタの場合であれば、ホストPCと通信可能な状態になる程度にハードウェアを初期化し、ホストPCから受信した通常用制御プログラムのデータをFLASH ROM 102に書き込む機能と説明することができる。
【0023】
本実施例においてFLASH ROM 102はCPU 101の論理アドレス0hに割り当てられており、システムの電源が投入され、CPU 101が動作を開始すると自動的にブートプログラム201が実行される。
【0024】
以上の構成からなる実施例の動作を図3を参照して説明する。
【0025】
図3のフローチャートを用いて、システム電源投入後の起動処理について説明する。起動処理は全てブートプログラムが実行する処理である。
CPU 101の起動後、まず、CPU101は、最初に各種I/Oポート及びバスの初期化を行う(302)。CPU 101がメモリコントローラを搭載する場合には、このときにメモリコントローラのレジスタ設定も行い、RAM 103a及びRAM 104aにアクセスすることが可能な状態としておく。
【0026】
次にCPU101は、RAM 103a、RAM 103bのRead/Writeチェックを行う(303)。これは、RAM上の任意のアドレスに特定のデータを書き込み、その後同じアドレスのデータを読み込むという処理を繰り返す。書き込んだデータと読み込んだデータが同じであれば、RAMの書き込みと読み込みが正しく行われていることが確認できる。
【0027】
RAM 103a、RAM 103bの正常なRead/Writeが確認できたら、FLASH ROM 102内のプログラムを全てRAMにコピーする(304)。RAM上で実行するのは通常用制御プログラム203、もしくは非常用制御プログラム202であるため、RAM容量に余裕の無い場合はブートプログラム201はコピーしなくてもよい。また、実際に実行されるのは通常用制御プログラム203、もしくは非常用制御プログラム202のどちらか一方であることから、より使用RAM容量を減らすため、あるいは起動処理時間を短縮するためには、実行する方の制御プログラムのみをコピーするという方法も考えられる。しかしながらこの後、各制御プログラムの整合性を確認するためチェックSUMの算出を行うため、制御プログラム全体に対してReadを行わなければならない。このときCPU 101は、制御プログラムの容量と同数のReadを繰り返すため、FLASH ROM 102よりアクセス速度の速いRAM 103a、RAM 103bに一度全制御プログラムをコピーしておいたほうが、結果的に起動処理時間を短縮することができるのである。本実施例においてはRAM容量に余裕があり、また起動処理を単純化してデバッグの効率化を図る目的のもと、FLASH ROM 102の内容を全てRAMにコピーしておくものとする。
【0028】
次に、以下の方法により通常用制御プログラム203のチェックSUMを算出する(305)。チェックサムの詳細を図4に示す。同図に示すように、以下のステップがある。
アドレスC040000hを変数aに記憶する(402)。
チェックSUM記憶用の変数bを用意し、0クリアしておく(403)。
aのアドレスが示す1Byteのデータを読み込み変数bに加算する(404)。
変数aを1増分する(405)。
変数aがC200000hになったら終了、満たなければ3に戻る(406)。
チェックSUMが算出できたら、次にその値が適正であるかどうかをCPUにより判断する(306)。
【0029】
SUM値は通常、0等の既定値、もしくは書き込まれたプログラムのバージョンと同値になるよう調整され、FLASH ROM 102に書き込まれている。本実施例では、各制御プログラムのSUM値は0になるよう調整されており、算出したSUM値が0であるかどうかで、制御プログラムの整合性を確認することができる。もしSUM値が0以外であった場合、FLASH ROM 102中の通常用制御プログラム203領域に何らかの障害が発生し、書き込まれたデータが失われた、あるいは素子の不良によりRead/Writeに不具合が発生したと判断することができる。
【0030】
SUM値が0となり、通常用制御プログラム203の整合性が確認できた場合には、CPU 101のプログラムカウンタをC040000hに書き換えることにより(307)、RAM上の通常用制御プログラム203を実行し、システム全体を起動する(309)。仮にシステムをプリンタと仮定した場合、メカ初期化、ホストPCとの通信等を開始し、受信データを印刷するといったプリンタとしての機能が、通常用制御プログラム203の実行によりはじめて利用できるようになる。
【0031】
もしSUM値が0以外の値となり、通常用制御プログラム203の整合性が確認できない場合には、プログラムカウンタをC006000hに書き換え(308)、RAM上から非常用制御プログラムを実行する(610)。この時、システムの操作者に通常用制御プログラム203が実行不可能であることを、LED表示、LCD表示、ブザー共鳴等、何らかの形で通知することが望ましい。
【0032】
前述のように、非常用制御プログラム202は、必要最小限のハードウェア初期化機能と、FLASH ROM 102内の通常用制御プログラム203領域(4000h〜1FFFFFh)を書き換える機能しか備わっていないため、正しい通常用制御プログラムを外部から受信する必要がある。データ受信のためには、基板上にシリアル通信ポートを装備するか、もしくはプリンタのように元々外部からデータを受信する手段が備わっていなければならない。例えばシステムがプリンタであった場合、非常用制御プログラム202の実行によりUSB、IEEE1284等のプリンタ−ホストPC間インターフェースの初期化を行い、ホストPCとデータ送受信が可能な状態にする。次にホストPC上で動作する制御プログラム転送用ソフトウェアを用意し、正しい制御プログラムをシステムに転送する。受信したデータはRAM 103a、RAM 103b上に展開し、チェックSUM等を用いて受信データを検証、通常用制御プログラム203領域を受信データで書き換える。その後システムを再起動することにより、ブートプログラム201を実行、通常用制御プログラム203のSUMチェックをパスできれば、外装の取り外し、基板交換、FLASH ROM 102の物理的交換等を行うことなく、システムを復旧させることが可能となる。
【0033】
また、プリンタ等のシステムであれば、出荷後に不具合を修正する必要に迫られたり、市場の要望により機能を追加したりすることがありうるが、こういった場合には通常用制御プログラム203を書き換えることで対応することが多い。このような制御プログラムの書き換えは前述のように、
ホストPCから制御プログラムを受信。
RAM上に展開しSUMチェックを実行。
書き換えるFLASH ROMの領域を消去。
消去した領域に受信データを書き込み。
行われる。
【0034】
例えばFLASH ROMの消去終了後、受信データ書き込み前に、停電もしくは人為的ミスにより電源が断たれたような場合、制御プログラムが格納されているべき領域は空白となり、システムの動作が不可能な状態になってしまう。
このときシステムに本発明を適用していたのであれば、通常用制御プログラムが完全に消去されたとしても、非常用制御プログラムの実行により通常用制御プログラムを復旧することが可能になるのである。
(第二の実施例)
次にその他の実施例を説明する、上述した第一の実施例におけるハードウェア構成と同様であるため、図1を参照して説明する。
【0035】
図5はFLASH ROM 102の物理アドレスに対するプログラムの格納状態を示したメモリマップである。本実施例におけるシステムは2ByteのFLASH ROMが装備されているものとする。FLASH ROM 102のボトム部(物理アドレス:0h)には128KByteのブートプログラム501が、物理アドレス20000hからは960KByteの第一制御プログラム502が、物理アドレス110000hからは第二制御プログラム503が格納されている。各プログラムの容量、格納アドレスについては、第一の実施例と同様、システムにより異なり、この他に各種の設定情報を記録しておくための箇所を追加してもよい。各プログラムの先頭物理アドレスは、ブートプログラム501内にテーブルとして保存されており、ブートプログラム実行中はいつでも参照することが可能である。
【0036】
ブートプログラム501は、起動処理に必要なCPU 101のI/Oポート、メモリコントローラの初期化、FLASH ROM 102の内容をRAMへコピーする機能、各制御プログラムのSUMチェック機能、及びブートプログラム501から第一制御プログラム502、もしくは第二制御プログラム503に処理を移行させる機能等を持つ。
【0037】
第一制御プログラム502はシステム全体の制御を行う、いわばメインのプログラムであり、第一の実施例における通常用制御プログラム203と同様のものであるため、説明を省略する。
【0038】
第二制御プログラム503は、第一制御プログラムと全く同じ内容であり、通常は使用されず、第一制御プログラムに障害が発生した場合にのみ起動する、いわばバックアッププログラムである。
【0039】
以上の構成からなる実施例の動作を図6を参照して説明する。
図6のフローチャートを用いて、システム電源投入後の起動処理について説明する。起動処理は全てブートプログラムが実行する処理である。 システム電源投入後の起動処理について説明するが、アドレス、制御プログラム名が異なるのみで、内容については第一の実施例における図3と同様であるため、詳細については省略する。
【0040】
CPU 101の起動後、各種I/Oポート及びバスの設定を行う(602)。
RAM 103a、RAM 103bのRead/Writeチェックを行い(603)、FLASH ROM 102の内容を全てRAMにコピーする(604)。
第一の実施例と同様の方法で第一制御プログラム502のSUMチェックを行い(605)、SUM値が0であるかどうかで第一制御プログラム502の整合性を確認する(606)。
【0041】
第一制御プログラム502の整合性が確認できた場合、CPU 101のプログラムカウンタをC020000hに書き換え(607)、RAM上の第一制御プログラム502を実行し、システム全体を起動する(609)。第一制御プログラム502はメインのプログラムであり、仮にシステムをプリンタと仮定した場合、第一制御プログラム502の実行により、プリンタとして全ての機能を利用できるようになる。
【0042】
もしSUM値が0以外の値となり、第一制御プログラム502の整合性が確認できない場合には、プログラムカウンタをC020000hに書き換え(608)、RAM上から第二制御プログラム503を実行する(610)。
【0043】
第二制御プログラム503は、前述のように第一制御プログラム502と全く同じ内容である。このため、何らかの障害発生により第一制御プログラム502が実行不能になったとしても、第二制御プログラム503の実行により通常通り、システムの全機能を利用することができるのである。
【0044】
ただし、この後第二制御プログラム503にも障害が発生してしまった場合は、システム全体が動作不能となってしまうので、第二制御プログラム503に処理が移行した時点で、システム操作者に何らかの方法で警告を与え、第一制御プログラム502の書き換えを促すことが望ましい。
【0045】
第一の実施例と同様、プリンタ等のシステムの場合、制御プログラムの更新を行わなければならない事態は十分ありえるのであるが、更新の度、FLASH ROM 102の書き換え失敗によりシステムが動作不能に陥る危険を伴う。
【0046】
こういったときに本発明を適用していれば、仮にFLASH ROMの書き換えに失敗してしまっても、バックアッププログラムの存在により、再度FLASH ROMの書き換えを行うことが可能となる。
(第三の実施例)
上述した第一の実施例、及び第二の実施例におけるハードウェア構成と同様であるため、図1を参照して説明する。
【0047】
また本実施例におけるFLASH ROM 102のメモリマップ、及び起動処理の内容についても第一の実施例と同様であるため、図2、図3を使用することで説明する
本実施例における通常用制御プログラム203は、処理の実行結果をブートプログラム201の領域中にログとして保存しておくことを特徴としている。
通常用制御プログラム203は、CPU 101のウォッチドッグタイマを監視する処理を定期的に行っており、制御プログラムの暴走等により、システムがフリーズするような状態に陥ると、そのログをFLASH ROM 102のブートプログラム201領域に書き出しておく。
【0048】
システムがフリーズしてしまった場合には再起動を行い復旧させることになるが、そのときブートプログラム201領域のログを確認し、システムの正常な起動が不可能と判断した場合には、SUMチェックにより通常用制御プログラム203の整合性が確認できたとしても、強制的に非常用制御プログラム202を実行する。
【0049】
これにより、制御プログラムのバグにより操作不能に陥ってしまった場合でも、非常用制御プログラム202の機能により通常用制御プログラム203の領域を書き換えることが可能となる。
【0050】
【発明の効果】
以上説明したように本発明によれば、例えば、ブートプログラムに対して、複数の制御プログラムを保持し、ブートプログラムにより制御プログラムの整合性検証を行い、検証結果に基づいて適切な制御プログラムを選択し、切り替えて実行することが可能となる。
【図面の簡単な説明】
【図1】実施例におけるハードウェア構成を示すブロック図
【図2】実施例におけるFLASH ROM 102のメモリマップを示す図
【図3】実施例における起動処理を表すフローチャート
【図4】実施例におけるチェックSUM算出方法を現すフローチャート
【図5】第二の実施例におけるFLASH ROM 102のメモリマップを示す図。
【図6】第二の実施例における起動処理を表すフローチャート
【符号の説明】
101 CPU
102 FLASH ROM
103a RAM
103b RAM
201 ブートプログラム
202 非常用制御プログラム
203 通常用制御プログラム
301 処理開始
302 CPU I/Oポート初期化処理
303 RAM Read/Writeチェック処理
304 制御プログラム RAMコピー処理
305 通常用制御プログラムSUM算出処理
306 SUM値確認処理
307 通常用制御プログラム移行処理
308 非常用制御プログラム移行処理
309 通常用制御プログラム実行処理
310 非常用制御プログラム実行処理
【発明の属する技術分野】
本発明は制御プログラム切替え装置及びその方法に関し、例えば複数の制御プログラムを備えたシステムにおける制御プログラム切替え装置及びその方法に関する。
【0002】
【従来の技術】
従来のCPUを備えるシステムにおける制御プログラムは、ROM領域内で単一しか保持されず、ブートプログラムからは既定の制御プログラムが実行されていた。
【0003】
【発明が解決しようとしている課題】
しかしながら、何らかの原因により制御プログラムに障害が発生した場合、代替手段が存在しないため、そのシステムは動作不可能な状態に陥ってしまう。
【0004】
その場合、ROMに保持された制御プログラムを書き換えることが必要となるが、ROMライターで書き換える場合にはROMを取り外す必要があり、基板上に実装されたROMであれば取り外しに多くの労力が必要となる。仮にROMの取り外しを予め想定するのであれば、取り外しの容易なソケット上にROMを取り付ける方法が考えられるが、この場合基盤のコストが上昇するという問題がある。
【0005】
もしROMライターを使用せずに障害に対処しようとした場合には、基盤の交換が必要となってしまい、システムの修復に要するコストはさらに増大することとなる。
【0006】
本発明は上述した課題を解決するためになされたものであり、通常実行される制御プログラムに何らかの障害が発生した場合に、緊急用に用意された別の制御プログラムを自動的に実行することのできる、制御プログラム切替え装置及びその方法を提供することを目的とする。
【0007】
【問題を解決するための手段】
上述した目的を達成するため、本発明は、即ち、CPUをブートするためのブートプログラムと、前記ブートプログラムにより動作可能な複数の制御プログラムとを保持する保持手段と、前記制御プログラムの整合性を検証する手段と、前記保持手段に保持された複数の制御プログラムを切り替える切替え手段とを有することを特徴とする。
【0008】
上述した目的を達成するため、本発明は、例えば、前記保持手段はROMであることを特徴とする。
【0009】
上述した目的を達成するため、本発明は、例えば、前記保持手段に保持された制御プログラムのうち、1つは通常使用される既定制御プログラムであることを特徴とする。
【0010】
上述した目的を達成するため、本発明は、例えば、前記保持手段に保持された制御プログラムのうち、前記既定制御プログラムを除いたうちの1つは前記既定制御プログラムが機能しない場合にのみ使用される、冗長制御プログラムであることを特徴とする。
【0011】
上述した目的を達成するため、本発明は、例えば、前記ブートプログラムは、前記制御プログラムの整合性を検証する手段を実行し、前記既定制御プログラムの整合性が保証されない場合に、前記プログラム切替え手段を実行し、前記冗長制御プログラムを実行することを特徴とする。
【0012】
上述した目的を達成するため、本発明は、例えば、前記保持手段は、前記複数の制御プログラムにおける、それぞれの実行開始アドレスを保持することを特徴とする。
【0013】
上述した目的を達成するため、本発明は、例えば、前記制御プログラム切替え手段は、前記整合性を検証する手段の実行結果により、保持された前記実行開始アドレスを前記CPUのプログラムカウンタに書き込むことで制御プログラムを実行することを特徴とする。
【0014】
上述した目的を達成するため、本発明は、前記制御プログラム切替え手段は、前記既定制御プログラムの整合性が保証された場合であっても、前記既定制御プルグラムの前回の実行結果により、前記冗長制御プログラムに切り替えることを特徴とする。
【0015】
上述した目的を達成するため、本発明は、例えば、単一のブートプログラムに対して、複数の制御プログラムを保持し、ブートプログラムにより制御プログラムの整合性検証を行い、検証結果に基づいて適切な制御プログラムを選択し、切り替えて実行することを特徴とする。
【作用】
以上の構成により、通常実行される制御プログラムに何らかの障害が発生した場合に、別の制御プログラムを自動的に実行し、同等の機能を実現する、もしくは機能を制限した緊急用プログラムを実行し、最低限の機能を実現することが可能となる。
【0016】
【実施例】
以下、図面を参照して本発明に係る一実施例を詳細に説明する。
(第一の実施例)
図1は本発明を実現するために必要なハードウェア構成のブロック図である。
【0017】
図1において、CPU 101はメモリに記憶されているプログラムに基づいて制御・処理を実行する。FLASH ROM 102は、プログラムなどを記憶する。RAM 103a、RAM 104bは、プログラムやデータなどを記憶する。それぞれは、バスを介して接続されていおり、FLASH ROM 102は論理アドレス0hに割り当てられている。RAM 103a及びRAM 104aは、CPU 101からは連続した1個の領域として認識され、論理アドレスC000000hに割り当てられているものとする。CPU 101はプログラムを実行し、FLASH ROM 102にはシステムの制御に必要な各種プログラム及び後述する図3,4、6に示すフローに対応するブートプログラムが格納されている。
RAM 103a、RAM 103bは、CPU 101が前述のプログラムを実行する際のワークメモリとして使用される他、FLASH ROM 102と比較してアクセス速度が高速なことから、FLASH ROM 102に格納された前述のプログラムをコピーしておくことでプログラムのRead/Writeに必要な時間を短縮し、システムを高速に動作させる役割も持つ。
【0018】
本実施例においては1個のCPU、1個のFLASH ROM、2個のRAMを備えているが、本発明を適用するシステムの規模により、その個数は変動する場合がある。尚、図1においては本実施例に関係する構成のみを抜粋しており、例えば画像を記録するプリンタのようなシステムに本発明を適用する場合には、これらの他に、画像保持用メモリ、モータ及びモータドライバ、各種センサ、記録用ヘッド、ホストPCとのインターフェース制御部等の各種デバイスが必要となる。
【0019】
図2はFLASH ROM 102の物理アドレスに対するプログラムの格納状態を示したメモリマップである。本実施例におけるシステムには2MByteのFLASH ROMが装備されているものとする。FLASH ROM 102のボトム部(物理アドレス:0h)には32KByteのブートプログラム201が、物理アドレス6000hからは224KByteの非常用制御プログラム202が、物理アドレス40000hからは1792KByteの通常用制御プログラム203が格納されている。各プログラムの容量、格納アドレスについてはシステムにより異なり、この他に各種の設定情報を記録しておくための箇所を追加してもよい。各プログラムの先頭物理アドレスは、ブートプログラム201内にテーブルとして保存されており、ブートプログラム実行中はいつでも参照することが可能である。
【0020】
ブートプログラム201は、起動処理に必要なCPU 101のI/Oポート、メモリコントローラの初期化、FLASH ROM 102の内容をRAMへコピーする機能、各制御プログラムのSUMチェック機能、及びブートプログラム201から通常用制御プログラム203、もしくは非常用制御プログラム202に処理を移行させる機能等を持つ。
【0021】
通常用制御プログラム203はシステム全体の制御を行う、いわばメインのプログラムである。先ほどと同様にプリンタに本発明を適用したとして説明すると、センサの監視、モータ制御、記録ヘッド制御等、プリンタとしての機能を実現するためのプログラムは全て通常用制御プログラム203に収められている。
【0022】
非常用制御プログラム202は、FLASH ROM102の容量に十分余裕がある場合には通常用制御プログラム203と全く同じ内容で良いが、本実施例においては容量の制限から、障害の発生している通常用制御プログラム203を書き換えるだけの機能を持つものとする。これが例えばプリンタの場合であれば、ホストPCと通信可能な状態になる程度にハードウェアを初期化し、ホストPCから受信した通常用制御プログラムのデータをFLASH ROM 102に書き込む機能と説明することができる。
【0023】
本実施例においてFLASH ROM 102はCPU 101の論理アドレス0hに割り当てられており、システムの電源が投入され、CPU 101が動作を開始すると自動的にブートプログラム201が実行される。
【0024】
以上の構成からなる実施例の動作を図3を参照して説明する。
【0025】
図3のフローチャートを用いて、システム電源投入後の起動処理について説明する。起動処理は全てブートプログラムが実行する処理である。
CPU 101の起動後、まず、CPU101は、最初に各種I/Oポート及びバスの初期化を行う(302)。CPU 101がメモリコントローラを搭載する場合には、このときにメモリコントローラのレジスタ設定も行い、RAM 103a及びRAM 104aにアクセスすることが可能な状態としておく。
【0026】
次にCPU101は、RAM 103a、RAM 103bのRead/Writeチェックを行う(303)。これは、RAM上の任意のアドレスに特定のデータを書き込み、その後同じアドレスのデータを読み込むという処理を繰り返す。書き込んだデータと読み込んだデータが同じであれば、RAMの書き込みと読み込みが正しく行われていることが確認できる。
【0027】
RAM 103a、RAM 103bの正常なRead/Writeが確認できたら、FLASH ROM 102内のプログラムを全てRAMにコピーする(304)。RAM上で実行するのは通常用制御プログラム203、もしくは非常用制御プログラム202であるため、RAM容量に余裕の無い場合はブートプログラム201はコピーしなくてもよい。また、実際に実行されるのは通常用制御プログラム203、もしくは非常用制御プログラム202のどちらか一方であることから、より使用RAM容量を減らすため、あるいは起動処理時間を短縮するためには、実行する方の制御プログラムのみをコピーするという方法も考えられる。しかしながらこの後、各制御プログラムの整合性を確認するためチェックSUMの算出を行うため、制御プログラム全体に対してReadを行わなければならない。このときCPU 101は、制御プログラムの容量と同数のReadを繰り返すため、FLASH ROM 102よりアクセス速度の速いRAM 103a、RAM 103bに一度全制御プログラムをコピーしておいたほうが、結果的に起動処理時間を短縮することができるのである。本実施例においてはRAM容量に余裕があり、また起動処理を単純化してデバッグの効率化を図る目的のもと、FLASH ROM 102の内容を全てRAMにコピーしておくものとする。
【0028】
次に、以下の方法により通常用制御プログラム203のチェックSUMを算出する(305)。チェックサムの詳細を図4に示す。同図に示すように、以下のステップがある。
アドレスC040000hを変数aに記憶する(402)。
チェックSUM記憶用の変数bを用意し、0クリアしておく(403)。
aのアドレスが示す1Byteのデータを読み込み変数bに加算する(404)。
変数aを1増分する(405)。
変数aがC200000hになったら終了、満たなければ3に戻る(406)。
チェックSUMが算出できたら、次にその値が適正であるかどうかをCPUにより判断する(306)。
【0029】
SUM値は通常、0等の既定値、もしくは書き込まれたプログラムのバージョンと同値になるよう調整され、FLASH ROM 102に書き込まれている。本実施例では、各制御プログラムのSUM値は0になるよう調整されており、算出したSUM値が0であるかどうかで、制御プログラムの整合性を確認することができる。もしSUM値が0以外であった場合、FLASH ROM 102中の通常用制御プログラム203領域に何らかの障害が発生し、書き込まれたデータが失われた、あるいは素子の不良によりRead/Writeに不具合が発生したと判断することができる。
【0030】
SUM値が0となり、通常用制御プログラム203の整合性が確認できた場合には、CPU 101のプログラムカウンタをC040000hに書き換えることにより(307)、RAM上の通常用制御プログラム203を実行し、システム全体を起動する(309)。仮にシステムをプリンタと仮定した場合、メカ初期化、ホストPCとの通信等を開始し、受信データを印刷するといったプリンタとしての機能が、通常用制御プログラム203の実行によりはじめて利用できるようになる。
【0031】
もしSUM値が0以外の値となり、通常用制御プログラム203の整合性が確認できない場合には、プログラムカウンタをC006000hに書き換え(308)、RAM上から非常用制御プログラムを実行する(610)。この時、システムの操作者に通常用制御プログラム203が実行不可能であることを、LED表示、LCD表示、ブザー共鳴等、何らかの形で通知することが望ましい。
【0032】
前述のように、非常用制御プログラム202は、必要最小限のハードウェア初期化機能と、FLASH ROM 102内の通常用制御プログラム203領域(4000h〜1FFFFFh)を書き換える機能しか備わっていないため、正しい通常用制御プログラムを外部から受信する必要がある。データ受信のためには、基板上にシリアル通信ポートを装備するか、もしくはプリンタのように元々外部からデータを受信する手段が備わっていなければならない。例えばシステムがプリンタであった場合、非常用制御プログラム202の実行によりUSB、IEEE1284等のプリンタ−ホストPC間インターフェースの初期化を行い、ホストPCとデータ送受信が可能な状態にする。次にホストPC上で動作する制御プログラム転送用ソフトウェアを用意し、正しい制御プログラムをシステムに転送する。受信したデータはRAM 103a、RAM 103b上に展開し、チェックSUM等を用いて受信データを検証、通常用制御プログラム203領域を受信データで書き換える。その後システムを再起動することにより、ブートプログラム201を実行、通常用制御プログラム203のSUMチェックをパスできれば、外装の取り外し、基板交換、FLASH ROM 102の物理的交換等を行うことなく、システムを復旧させることが可能となる。
【0033】
また、プリンタ等のシステムであれば、出荷後に不具合を修正する必要に迫られたり、市場の要望により機能を追加したりすることがありうるが、こういった場合には通常用制御プログラム203を書き換えることで対応することが多い。このような制御プログラムの書き換えは前述のように、
ホストPCから制御プログラムを受信。
RAM上に展開しSUMチェックを実行。
書き換えるFLASH ROMの領域を消去。
消去した領域に受信データを書き込み。
行われる。
【0034】
例えばFLASH ROMの消去終了後、受信データ書き込み前に、停電もしくは人為的ミスにより電源が断たれたような場合、制御プログラムが格納されているべき領域は空白となり、システムの動作が不可能な状態になってしまう。
このときシステムに本発明を適用していたのであれば、通常用制御プログラムが完全に消去されたとしても、非常用制御プログラムの実行により通常用制御プログラムを復旧することが可能になるのである。
(第二の実施例)
次にその他の実施例を説明する、上述した第一の実施例におけるハードウェア構成と同様であるため、図1を参照して説明する。
【0035】
図5はFLASH ROM 102の物理アドレスに対するプログラムの格納状態を示したメモリマップである。本実施例におけるシステムは2ByteのFLASH ROMが装備されているものとする。FLASH ROM 102のボトム部(物理アドレス:0h)には128KByteのブートプログラム501が、物理アドレス20000hからは960KByteの第一制御プログラム502が、物理アドレス110000hからは第二制御プログラム503が格納されている。各プログラムの容量、格納アドレスについては、第一の実施例と同様、システムにより異なり、この他に各種の設定情報を記録しておくための箇所を追加してもよい。各プログラムの先頭物理アドレスは、ブートプログラム501内にテーブルとして保存されており、ブートプログラム実行中はいつでも参照することが可能である。
【0036】
ブートプログラム501は、起動処理に必要なCPU 101のI/Oポート、メモリコントローラの初期化、FLASH ROM 102の内容をRAMへコピーする機能、各制御プログラムのSUMチェック機能、及びブートプログラム501から第一制御プログラム502、もしくは第二制御プログラム503に処理を移行させる機能等を持つ。
【0037】
第一制御プログラム502はシステム全体の制御を行う、いわばメインのプログラムであり、第一の実施例における通常用制御プログラム203と同様のものであるため、説明を省略する。
【0038】
第二制御プログラム503は、第一制御プログラムと全く同じ内容であり、通常は使用されず、第一制御プログラムに障害が発生した場合にのみ起動する、いわばバックアッププログラムである。
【0039】
以上の構成からなる実施例の動作を図6を参照して説明する。
図6のフローチャートを用いて、システム電源投入後の起動処理について説明する。起動処理は全てブートプログラムが実行する処理である。 システム電源投入後の起動処理について説明するが、アドレス、制御プログラム名が異なるのみで、内容については第一の実施例における図3と同様であるため、詳細については省略する。
【0040】
CPU 101の起動後、各種I/Oポート及びバスの設定を行う(602)。
RAM 103a、RAM 103bのRead/Writeチェックを行い(603)、FLASH ROM 102の内容を全てRAMにコピーする(604)。
第一の実施例と同様の方法で第一制御プログラム502のSUMチェックを行い(605)、SUM値が0であるかどうかで第一制御プログラム502の整合性を確認する(606)。
【0041】
第一制御プログラム502の整合性が確認できた場合、CPU 101のプログラムカウンタをC020000hに書き換え(607)、RAM上の第一制御プログラム502を実行し、システム全体を起動する(609)。第一制御プログラム502はメインのプログラムであり、仮にシステムをプリンタと仮定した場合、第一制御プログラム502の実行により、プリンタとして全ての機能を利用できるようになる。
【0042】
もしSUM値が0以外の値となり、第一制御プログラム502の整合性が確認できない場合には、プログラムカウンタをC020000hに書き換え(608)、RAM上から第二制御プログラム503を実行する(610)。
【0043】
第二制御プログラム503は、前述のように第一制御プログラム502と全く同じ内容である。このため、何らかの障害発生により第一制御プログラム502が実行不能になったとしても、第二制御プログラム503の実行により通常通り、システムの全機能を利用することができるのである。
【0044】
ただし、この後第二制御プログラム503にも障害が発生してしまった場合は、システム全体が動作不能となってしまうので、第二制御プログラム503に処理が移行した時点で、システム操作者に何らかの方法で警告を与え、第一制御プログラム502の書き換えを促すことが望ましい。
【0045】
第一の実施例と同様、プリンタ等のシステムの場合、制御プログラムの更新を行わなければならない事態は十分ありえるのであるが、更新の度、FLASH ROM 102の書き換え失敗によりシステムが動作不能に陥る危険を伴う。
【0046】
こういったときに本発明を適用していれば、仮にFLASH ROMの書き換えに失敗してしまっても、バックアッププログラムの存在により、再度FLASH ROMの書き換えを行うことが可能となる。
(第三の実施例)
上述した第一の実施例、及び第二の実施例におけるハードウェア構成と同様であるため、図1を参照して説明する。
【0047】
また本実施例におけるFLASH ROM 102のメモリマップ、及び起動処理の内容についても第一の実施例と同様であるため、図2、図3を使用することで説明する
本実施例における通常用制御プログラム203は、処理の実行結果をブートプログラム201の領域中にログとして保存しておくことを特徴としている。
通常用制御プログラム203は、CPU 101のウォッチドッグタイマを監視する処理を定期的に行っており、制御プログラムの暴走等により、システムがフリーズするような状態に陥ると、そのログをFLASH ROM 102のブートプログラム201領域に書き出しておく。
【0048】
システムがフリーズしてしまった場合には再起動を行い復旧させることになるが、そのときブートプログラム201領域のログを確認し、システムの正常な起動が不可能と判断した場合には、SUMチェックにより通常用制御プログラム203の整合性が確認できたとしても、強制的に非常用制御プログラム202を実行する。
【0049】
これにより、制御プログラムのバグにより操作不能に陥ってしまった場合でも、非常用制御プログラム202の機能により通常用制御プログラム203の領域を書き換えることが可能となる。
【0050】
【発明の効果】
以上説明したように本発明によれば、例えば、ブートプログラムに対して、複数の制御プログラムを保持し、ブートプログラムにより制御プログラムの整合性検証を行い、検証結果に基づいて適切な制御プログラムを選択し、切り替えて実行することが可能となる。
【図面の簡単な説明】
【図1】実施例におけるハードウェア構成を示すブロック図
【図2】実施例におけるFLASH ROM 102のメモリマップを示す図
【図3】実施例における起動処理を表すフローチャート
【図4】実施例におけるチェックSUM算出方法を現すフローチャート
【図5】第二の実施例におけるFLASH ROM 102のメモリマップを示す図。
【図6】第二の実施例における起動処理を表すフローチャート
【符号の説明】
101 CPU
102 FLASH ROM
103a RAM
103b RAM
201 ブートプログラム
202 非常用制御プログラム
203 通常用制御プログラム
301 処理開始
302 CPU I/Oポート初期化処理
303 RAM Read/Writeチェック処理
304 制御プログラム RAMコピー処理
305 通常用制御プログラムSUM算出処理
306 SUM値確認処理
307 通常用制御プログラム移行処理
308 非常用制御プログラム移行処理
309 通常用制御プログラム実行処理
310 非常用制御プログラム実行処理
Claims (9)
- CPUをブートするためのブートプログラムと、前記ブートプログラムで起動される動作可能な複数の制御プログラムとを保持する保持手段と、前記制御プログラムの少なくとも1つの整合性を検証する手段と、前記検証手段で前記制御プログラムの少なくとも1の整合性が検証されなかった場合、前記保持手段に保持された複数の制御プログラムのうちの他の制御プログラムに切り替える切替え手段とを有することを特徴とする制御プログラム切替え装置。
- 前記保持手段はROMであることを特徴とする請求項1に記載の制御プログラム切替え装置。
- 前記保持手段に保持された複数の制御プログラムのうち、1つは通常使用される既定制御プログラムであることを特徴とする請求項1に記載の制御プログラム切替え装置。
- 前記保持手段に保持された複数の制御プログラムは、前記既定制御プログラムと前記既定制御プログラムが機能しない場合にのみ使用される、冗長制御プログラムとを含むことを特徴とする請求項1に記載のプログラム切替え装置。
- 前記ブートプログラムは、前記制御プログラムの整合性を検証する手段を実行し、前記既定制御プログラムの整合性が保証されない場合に、前記プログラム切替え手段を実行し、前記冗長制御プログラムを実行することを特徴とする請求項1に記載の制御プログラム切替え装置。
- 前記保持手段は、前記複数の制御プログラムにおける、それぞれの実行開始アドレスを保持することを特徴とする請求項1に記載の制御プログラム切替え装置。
- 前記制御プログラム切替え手段は、前記整合性を検証する手段の実行結果により、保持された前記実行開始アドレスを前記CPUのプログラムカウンタに書き込むことで制御プログラムを実行することを特徴とする請求項1に記載の制御プログラム切替え装置。
- 前記制御プログラム切替え手段は、前記既定制御プログラムの整合性が保証された場合であっても、前記既定制御プログラムの前回の実行結果により、前記冗長制御プログラムに切り替えることを特徴とする請求項1に記載の制御プログラム切替え装置。
- 前記ブートプログラムに対して、複数の制御プログラムを保持し、前記ブートプログラムにより制御プログラムの整合性検証を行い、検証結果に基づいて適切な制御プログラムを選択し、切り替えて実行することを特徴とする制御プログラム切替え方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2003146221A JP2004348546A (ja) | 2003-05-23 | 2003-05-23 | 制御プログラム切替え装置及びその方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2003146221A JP2004348546A (ja) | 2003-05-23 | 2003-05-23 | 制御プログラム切替え装置及びその方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2004348546A true JP2004348546A (ja) | 2004-12-09 |
| JP2004348546A5 JP2004348546A5 (ja) | 2006-07-13 |
Family
ID=33533141
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2003146221A Pending JP2004348546A (ja) | 2003-05-23 | 2003-05-23 | 制御プログラム切替え装置及びその方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2004348546A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10108499B2 (en) | 2015-03-24 | 2018-10-23 | Mitsubishi Electric Corporation | Information processing device with watchdog timer |
| US11599631B2 (en) | 2018-11-02 | 2023-03-07 | Renesas Electronics Corporation | Semiconductor device, semiconductor system and program |
-
2003
- 2003-05-23 JP JP2003146221A patent/JP2004348546A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10108499B2 (en) | 2015-03-24 | 2018-10-23 | Mitsubishi Electric Corporation | Information processing device with watchdog timer |
| US11599631B2 (en) | 2018-11-02 | 2023-03-07 | Renesas Electronics Corporation | Semiconductor device, semiconductor system and program |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4668416B2 (ja) | ブート・ブロックへの書き込みアクセスを可能にする時のブート・ブロック・コードの保護 | |
| US8918778B2 (en) | Method of fail safe flashing management device and application of the same | |
| JP2008084291A (ja) | 記憶装置、制御方法及び制御装置 | |
| JP6543122B2 (ja) | 情報処理装置と、前記情報処理装置による不揮発記憶装置の初期化方法、及びプログラム | |
| US20040153738A1 (en) | Redundancy management method for BIOS, data processing apparatus and storage system for using same | |
| JP2005071303A (ja) | プログラム起動装置 | |
| JP2004054616A (ja) | ファームウェア自動修復機能を有する情報処理装置 | |
| JPH10307726A (ja) | 起動エラー時におけるファームウェアリカバリ方式 | |
| JP3805195B2 (ja) | プログラム書き換え装置及びプログラム書き換え方法 | |
| JP2004348546A (ja) | 制御プログラム切替え装置及びその方法 | |
| JP2004192329A (ja) | プログラム書換え方法および端末装置 | |
| JP2001344156A (ja) | フラッシュメモリを有する装置およびデータの書き換え方法 | |
| JP2002351687A (ja) | プリンタのファームウェアの更新方式 | |
| JPH1011277A (ja) | 電気的書換え可能な不揮発性メモリを備えるコンピュータ装置および不揮発性半導体メモリ | |
| JP2009238071A (ja) | 組込システム | |
| JPH0784894A (ja) | 不揮発性メモリの書き込み方法 | |
| JP2023152082A (ja) | ドライブユニット | |
| JP3498028B2 (ja) | ブートプログラム書き換えシステム | |
| JP2853593B2 (ja) | ダウンロード装置 | |
| JP2008009799A (ja) | 画像形成装置 | |
| JPH08161160A (ja) | 光ディスク再生装置のファームウエア更新方法 | |
| JPH09305395A (ja) | 電子機器 | |
| JP2003122575A (ja) | 情報処理装置 | |
| JP2004302631A (ja) | 情報処理装置 | |
| JP2812285B2 (ja) | プリンタ用ネットワークインタフェースカード |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060522 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060522 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090526 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20091001 |