(57)【要約】【課題】制御プログラムのアップデートを行なう場合、アップデートに失敗して制御プログラムが正常でない状態となったときに、自動的に処理を継続させる。【解決手段】アップデートの処理の開始時に、再起動後にアクセスする先頭番地にデータ判定用データＤＸを書き込んでおき、アップデートが完了したら、この先頭番地のデータをデータ判定用データから、アップデートされる制御プログラム本来のデータに書き換える。プロセッサであるＭＰＵが、再起動後に最初に先頭番地をアクセスするとき、先頭番地のデータを検出ユニット４０に取り込み、データ判定用データＤＸである場合には、アップデートが正常に完了しなかったと判断し、アドレスラインＡ３１を変換して、ＭＰＵに、バックアッププログラムを実行させる。【選択図】図１
2018180608.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行するプログラム実行装置（１０，１２，１３）であって、
前記プログラムを読み取って実行するプロセッサ（２０）と、
前記プロセッサが実行する制御プログラムを書き換え可能に記憶する不揮発性メモリ（３０）であって、前記書き換えられる制御プログラムが記憶されたアドレス領域とは異なるアドレス領域であって、書き換えが行なわれない領域として予め定めたアドレス領域に、バックアッププログラムを記憶した不揮発性メモリと、
前記書き換え後に、前記書き換えられた制御プログラムの実行に支障があることを検出したとき、前記不揮発性メモリに対するアドレス信号の一部を変換することで、前記バックアッププログラムを実行させるアドレス変換部（９０，９２，９３）と
を備えたプログラム実行装置。
【請求項２】
請求項１記載のプログラム実行装置であって、
前記制御プログラムの書き換え完了まで、前記プロセッサが再起動後に最初にアクセスする先頭アドレスのデータを特定のデータとしておき、前記書き換えの完了後に前記先頭アドレスのデータを、前記制御プログラム自体のデータに書き換え、
前記アドレス変換部は、再起動後に最初にアクセスする先頭アドレスのデータが、前記特定のデータであった場合に、前記書き換えられた制御プログラムの実行に支障があると検出する
プログラム実行装置。
【請求項３】
前記アドレス変換部（９２）は、前記プロセッサから、前記制御プログラムを構成する情報に前記プロセッサが実行できないオペレータが含まれることを検出した信号を受け取った時、前記書き換えられた制御プログラムの実行に支障があることを検出する請求項１記載のプログラム実行装置。
【請求項４】
前記アドレス変換部（９３）は、前記プロセッサが定期的に出力する信号を用いて動作するウォッチドッグタイマ（４３）を用いて、前記書き換えられた制御プログラムの実行に支障があることを検出する請求項１記載のプログラム実行装置。
【請求項５】
プログラムを実行するプログラム実行方法であって、
前記プログラムを読み取って実行するプロセッサにより、不揮発性メモリに記憶された制御プログラムを実行させ、
前記プロセッサが実行する制御プログラムを書き換える書き換え処理を、前記プロセッサに実行させ、
前記書き換え処理の後に、前記書き換えられた制御プログラムの実行に支障があることを検出したとき、前記不揮発性メモリに対するアドレス信号の一部を変換することで、前記制御プログラムが記憶された前記不揮発性メモリのアドレス領域とは異なるアドレス領域であって、書き換えが行なわれない領域として予め定めたのアドレス領域に記憶されたバックアッププログラムを実行させる
プログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリに記憶したプログラムを実行するプログラム実行装置に関する。
【背景技術】
【０００２】
フラッシュメモリなどの不揮発性メモリに記憶されたプログラムを順次実行することで、演算や処理を行なうプログラム実行装置が知られている。こうしたプログラム実行装置は、ＣＰＵやＦＰＧＡなどの演算装置が、不揮発性メモリに記憶されたプログラムやデータにアクセスすることで演算や処理を行なうので、不揮発性メモリの内容を書き換えれば、実行する処理の内容を変更することが容易である。
【０００３】
そこで、従来から、処理内容をアップデートするために、こうしたプログラム実行装置の不揮発性メモリの内容を書き換えることが行なわれている。この場合、不揮発性メモリの内容を書き換えるには所定の時間がかかるため、書き換えの途中で電源断などの不具合により、不揮発性メモリの内容を正常に書き換えられず、プログラム実行装置が再起動するということが生じ得る。この場合、再起動したプログラム実行装置は処理を正常に行なうことができない。このため、従来、内容を書き換えられない領域にバックアップ用のプログラムを記憶しておき、スイッチを手動操作することにより、バックアップ用プログラムを実行させることが行なわれていた（例えば下記特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−５４８１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、不揮発性メモリの内容が正常に書き換えられなかったプログラム実行装置をバックアッププログラムにより動作させるには、スイッチの切替などの手動操作が必要であった。従って、不揮発性メモリの書き換えに失敗したプログラム実行装置を、自動で正常に動作させることはできなかった。このため、組込機器などで用いられているプログラム実行装置では、ネットワークに接続されていたとしても、動作内容のアップデートなど不揮発性メモリの内容の書き換えを自動で行なわせることは困難であった。書き換えの途中に電源断などの不具合が生じた場合、自動で正常な動作に復することができないからである。このため、機器組込型の制御装置などでは、自動で素早く再起動させることが困難であった。なお、アップデートはネットワークを介さないでも可能であり、上位のコンピュータから直接プログラムの提供を受けて、行なうことも行なわれる。
【課題を解決するための手段】
【０００６】
本発明は、上述の課題の少なくとも一部を解決するためになされたものであり、以下の態様又は適用例として実現することが可能である。
【０００７】
本発明の第１の態様は、プログラムを実行するプログラム実行装置（１０，１２，１３）である。このプログラム実行装置は、前記プログラムを読み取って実行するプロセッサ（２０）と、前記プロセッサが実行する制御プログラムを書き換え可能に記憶する不揮発性メモリ（３０）であって、前記書き換えられる制御プログラムが記憶されたアドレス領域とは異なるアドレス領域であって、書き換えが行なわれない領域として予め定めたアドレス領域に、バックアッププログラムを記憶した不揮発性メモリと、前記書き換え後に、前記書き換えられた制御プログラムの実行に支障があることを検出したとき、前記不揮発性メモリに対するアドレス信号の一部を変換することで、前記バックアッププログラムを実行させるアドレス変換部（９０，９２，９３）とを備える。
【０００８】
かかる構成を備えたプログラム実行装置は、制御プログラムをアップデートなどにより書き換え後に、書き換えられた制御プログラムの実行に支障があることを検出したとき、不揮発性メモリに対するアドレス信号の一部を変換することで、バックアッププログラムを実行させる。このため、アップデート中などに電源断などの不具合が生じて、アップデートが正常に行なえなかった場合でも、特に人手を介することなく、バックアッププログラムを実行させることができる。
【０００９】
本発明の第２の態様は、プログラムを実行するプログラム実行方法である。このプログラム実行方法は、前記プログラムを読み取って実行するプロセッサにより、不揮発性メモリに記憶された制御プログラムを実行させ、前記プロセッサが実行する制御プログラムを書き換える書き換え処理を、前記プロセッサに実行させ、前記書き換え処理の後に、前記書き換えられた制御プログラムの実行に支障があることを検出したとき、前記不揮発性メモリに対するアドレス信号の一部を変換することで、前記制御プログラムが記憶された前記不揮発性メモリのアドレス領域とは異なるアドレス領域であって、書き換えが行なわれない領域として予め定めたアドレス領域に記憶されたバックアッププログラムを実行させる。従って、上述のプログラム実行装置と同様、アップデート中などに電源断などの不具合が生じて、アップデートが正常に行なえなかった場合でも、特に人手を介することなく、バックアッププログラムを実行させることができる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態の制御装置を示す概略構成図。
【図２】アドレス変換回路の入出力論理を示す説明図。
【図３】制御装置が実行する処理を示すフローチャート。
【図４】第１実施形態における遷移図。
【図５】第１実施形態における各信号のタイミングを示すタイミングチャート。
【図６】第２実施形態の制御装置を示す概略構成図。
【図７】第２実施形態における遷移図。
【図８】第３実施形態の制御装置を示す概略構成図。
【図９】第３実施形態において制御装置が実行する処理を示すフローチャート。
【発明を実施するための形態】
【００１１】
Ａ．第１実施形態：
プログラム実行装置およびプログラム実行方法のいくつかの実施形態を以下説明する。第１実施形態としての制御装置１０は、図１に示すように、プログラムに従った演算処理を実行するマイクロプロセッサユニット（以下、ＭＰＵという）２０、ＭＰＵ２０が実行するプログラムや必要なデータなどを不揮発的に記憶している不揮発性メモリ３０、必要に応じてアドレスの変換を行なうアドレス変換回路９０を備える。アドレス変換回路９０は、ＭＰＵ２０の動作に支障がある状態であることを検出する検出ユニット４０、検出ユニット４０の検出状態を一定期間保持するラッチ５０、最上位のアドレスラインの論理を入替えるための論理回路であるエクスクルーシブノア回路（以下、ＸＮＯＲ回路という）６０を備える。この制御装置１０は、自動車や家庭電化製品などの機器に組み込まれて、機器の制御を行なう。制御装置１０は、ネットワーク７０に接続されており、ネットワーク７０を介して、外部サーバ８０に接続可能である。外部サーバ８０は、制御装置１０の制御プログラムのアップデータを保存しており、制御装置１０からの問合せに対して、制御装置１０がダウンロードできるアップデータがあれば、これをネットワーク７０を介して制御装置１０に提供する。
【００１２】
ＭＰＵ２０における入出力信号について簡単に説明する。ＭＰＵ２０は、Ａ３１〜Ａ０までの３２本のアドレスラインと、Ｄ３１〜Ｄ０までの３２本のデータラインと、その他の信号線を備える。アドレスラインＡ３１〜Ａ０、データラインＤ３１〜Ｄ０をまとめて扱う場合には、それぞれアドレスバスＡＤ、データバスＤＤと呼ぶ。アドレスラインＡ３１が指定するのは３２ビットのアドレスのＭＳＢであり、アドレスラインＡ０が指定するのはアドレスのＬＳＢである。同様に、データラインＤ３１が指定するのは３２ビットのデータのＭＳＢであり、データラインＤ０が指定するのはデータのＬＳＢである。
【００１３】
アドレスラインが３２本あることから、ＭＰＵ２０が指定し得るアドレス領域は、２＾３２、即ち４Ｇバイトである。アドレスの指定は、本明細書では、４ビットずつ区切ってこれを０〜Ｆの１６進コードを用いた８桁のＢＣＤコードで表わすものとする。１６進コードであることを示す際には、先頭に「０ｘ」符号を記載するものとする。従って、ＭＰＵ２０が扱える４Ｇバイトのアドレス領域は、０ｘ００００００００〜０ｘＦＦＦＦＦＦＦＦで表現される。０〜２Ｇまでのアドレス領域は、０ｘ００００００００〜０ｘ７ＦＦＦＦＦＦＦとして表わされ、２〜４Ｇまでのアドレス領域は、０ｘ８０００００００〜０ｘＦＦＦＦＦＦＦＦとして表わされる。以下、表記の煩雑さを回避するために、各アドレスについて、０ｘ００００００００を「％００」、０ｘ７ＦＦＦＦＦＦＦを「％７Ｆ」、０ｘ８０００００００を「％８０」、０ｘＦＦＦＦＦＦＦＦを「％ＦＦ」と表記する。これら以外のアドレスについては、先頭に「０ｘ」を付けてＢＣＤコードにより表記する。
【００１４】
ＭＰＵ２０のアドレスバスＡＤは、アドレスラインＡ３１を除いて、そのまま不揮発性メモリ３０のアドレスバスに接続されている。必要がある場合には、不揮発性メモリ３０のアドレスラインをＭＡ３１〜ＭＡ０と記載する。ＭＰＵ２０のデータバスＤＤは、そのまま不揮発性メモリ３０のデータバスに接続されている。必要がある場合には、不揮発性メモリ３０のデータラインをＭＤ３１〜ＭＤ０と記載する。
【００１５】
不揮発性メモリ３０は、フラッシュＲＯＭからなる４Ｇバイトのメモリである。そのうちの２Ｇバイト、％００〜％７Ｆには、機器制御のための通常の制御プログラムが記憶されている。制御装置１０が機器を制御しているときは、ＭＰＵ２０は、％００〜％７Ｆの範囲内であって、プログラムカウンタＰＣが示すアドレスの内容を順次実行する。不揮発性メモリ３０の残りの２Ｇバイトのうち、０ｘ８０００００００から始まる所定の領域には、機器制御のための制御プログラムのバックアッププログラムが記憶されている。このバックアッププログラムは、％００〜％７Ｆに格納されているプログラムに何らかの不具合が生じた際に、これに代えて実行されるプログラムである。％００〜％７Ｆに格納されているプログラムは、いわゆるアップデートによって書き換えられることがある。この書き換えが正常に終了しなかった場合などには、％００〜％７Ｆに格納された書き換えられた制御プログラムでは正常に機器を制御できないことがある。こうした場合に備えて、％８０から始まる領域にバックアッププログラムが格納されている。
【００１６】
ＭＰＵ２０の他の信号の入出力について説明する。ＭＰＵ２０は、アドレスバス、データバスの他、外部に信号を出力し、あるいは外部からの信号を入力する複数の入出力ポートを備える。入出力ポートのうち、特に外部の機器と接続される入出力ポートをポートＰＩＯとして示した。この他にも、ポートＣＳやポートＰＥ１などを図１には示した。ポートＣＳは、不揮発性メモリ３０のポートＣＳに接続されている。このポートＣＳは、ＭＰＵ２０が不揮発性メモリ３０にアクセスする際にアクティブ（ハイレベル）となって、不揮発性メモリ３０を選択するチップセレクト信号を出力する。ＭＰＵ２０と不揮発性メモリ３０との間には、フェッチサイクルを示す信号など、他の制御信号線も接続されているが、これらの信号とその接続は周知のものなので、図示および説明を省略した。また、出力ポートＰＥ１は、アドレス変換回路９０に含まれるＲＳフリップフロップであるラッチ５０のリセット端子Ｒに接続されている。この出力ポートＰＥ１の信号によるラッチ５０の動作については、後で詳しく説明する。
【００１７】
ＭＰＵ２０は、これらのポートの他、リセット信号を受け付けるポートＲＳＴを備える。ＭＰＵ２０は、このポートＲＳＴに、アクティブロウとなる信号が入力されると、実行中のすべての処理を中断し、内部の状態をリセットし、所定時間後に、プログラムの実行アドレスを指定するプログラムカウンタＰＣを初期値％００に戻し、不揮発性メモリ３０の先頭アドレスから処理を再開する。
【００１８】
ＭＰＵ２０のアドレスバスＡＤとデータバスＤＤは、そのままアドレス変換回路９０の検出ユニット４０のアドレスバスＡＤ及びデータバスＤＤに接続されている。検出ユニット４０は、内部に記憶したデータと、入力したアドレスおよびデータとが一致するか否かを判定する比較回路である。検出ユニット４０は、内部に、３２ビットのアドレス判定用データＡＡＡと、３２ビットのデータ判定用データＤＸとを記憶しており、ＭＰＵ２０が出力するアドレスおよびデータが、アドレス判定用データＡＡＡおよびデータ判定用データＤＸに一致したとき、所定期間をハイレベルとなる信号Ｓを出力し、同時に所定期間ロウレベルとなるリセット信号ＲＳＴを出力する。本実施形態では、アドレス判定用データＡＡＡは、アドレス％００に対応したデータである。
【００１９】
検出ユニット４０の信号Ｓは、ＲＳフリップフロップ回路であるラッチ５０のセット入力Ｓに入力されている。また、リセット信号ＲＳＴは、ＭＰＵ２０のリセット端子ＲＳＴに接続されている。この結果、ラッチ５０は以下の様に動作する。まずラッチ５０の初期状態、すなわちラッチ５０に電源が投入された直後には、ラッチ５０は、リセット状態となっており、その出力Ｑは、値０（ロウレベル）となっている。その後、検出ユニット４０が特定のアドレスにアクセスし、そのアドレスがアドレス判定用データが示すアドレスと一致し、かつ不揮発性メモリ３０のアドレスＡＡＡから読み出したデータがデータ判定用データＤＸと一致していると、検出ユニット４０は、リセット信号ＲＳＴを所定期間ロウレベルとし、信号Ｓを所定期間ハイレベルとする。従って、このとき、ＭＰＵ２０はリセットされ、同時にラッチ５０はセット状態とされる。
【００２０】
ラッチ５０がセットされると、出力Ｑは反転して、値１（ハイレベル）となる。一旦、ラッチ５０がセットされると、その状態は、ＭＰＵ２０がリセットされても変化しない。ラッチ５０がリセットされて、出力Ｑが値０（ロウレベル）に戻るのは、ＭＰＵ２０がポートＰＥ１から信号を出力して、ラッチ５０をリセットした場合だけである。
【００２１】
ラッチ５０の出力Ｑは、２入力のＸＮＯＲ回路６０の一方の入力端子に接続されている。またＸＮＯＲ回路６０の他方の入力端子には、ＭＰＵ２０のアドレスラインＡ３１が接続されている。ＸＮＯＲ回路６０の出力は、アドレスラインＡ３１に代えて、不揮発性メモリ３０のアドレスラインＭＡ３１に接続されている。このＸＮＯＲ回路６０の入出力関係を示したのが、図２である。ＸＮＯＲ回路６０は、エクスクルーシブオア（排他的論理和）の出力をノット（反転）する回路であることから、図２に示したように、２つの入力端子のレベルが０または１で揃ったときに出力が値０（ロウレベル）に、２つの入力端子のレベルが揃っていない時に出力が値１（ハイレベル）になる。ＸＮＯＲ回路６０の出力は、不揮発性メモリ３０のアドレスラインＭＡ３１に接続されているから、不揮発性メモリ３０のアドレスラインＭＡ３１は、ラッチ５０の出力Ｑが値０の場合には、ＭＰＵ２０のアドレスラインＡ３１と同じレベルの信号を受け取り、ラッチ５０の出力が値１の場合には、ＭＰＵ２０のアドレスラインＡ３１を反転した信号を受け取ることになる。かかる動作により、アドレス変換回路９０は、必要に応じて、ＭＰＵ２０が出力する不揮発性メモリ３０へのアドレスを変換する。
【００２２】
以上説明した回路構成を備えた制御装置１０の動作について説明する。制御装置１０は機器組み込み型の装置であることから、ＭＰＵ２０は、電源が投入されている間は基本的に、対象となる機器を制御する制御プログラムをプログラムカウンタＰＣの値に従って、順次実行している。制御装置１０は、電源が投入され、初期化の処理を完了すると、機器制御を実行する（ステップＳ１００）。この機器制御は、ＭＰＵ２０の図示しない入出力ポートに信号を受け取り、入出力ポートから信号を出力して、対象機器を制御するものである。
【００２３】
ＭＰＵ２０は、機器制御を実行するが、所定のタイミング、例えば機器制御が終了した時点で、アップデートの確認を行なう（ステップＳ１１０）。アップデートの確認は、ネットワーク７０を介してサーバ８０に問い合わせることにより行なうことができる。
【００２４】
問い合わせた結果、アップデートがなければ、ステップＳ１００に戻って、機器制御を継続する。この場合、機器制御が終了していれば、次に機器の制御が開始されるまで待機することになる。他方、アップデートの確認をして、サーバ８０に制御装置１０のアップデートプログラムが存在すれば、ＭＰＵ２０は、プログラムカウンタＰＣの値を０ｘ７Ｆ００００００にセットし、アドレス０ｘ７Ｆ００００００〜０ｘ７ＦＦＦＦＦＦＦまでに置かれているアップデートプログラムをロードする処理を実行する。この処理が、ステップＳ１３０以下の処理である。なお、この例では、アップデートプログラムは、不揮発性メモリ３０のアドレス０ｘ００００００００〜０ｘ７ＥＦＦＦＦＦＦまでにロードされる。
【００２５】
アップデートプログラムをロードする処理が開始されると、ＭＰＵ２０は、不揮発性メモリ３０のアクセス先頭番地、つまりアドレス００００００００に、書換中フラグを書き込む処理を行なう（ステップＳ１３０）。ここに書き込むデータは、データ判定用データＤＸである。次に、ＭＰＵ２０は、先頭番地以外のアップデートプログラムの書き込みを行なう（ステップＳ１４０）。
【００２６】
アップデートプログラムを不揮発性メモリ３０の先頭番地以外のアドレス、この例では０ｘ０００００００１から０ｘ７ＥＦＦＦＦＦに書き込む処理が完了すると、次に、アクセス先頭番地、つまりアドレス％００に、アップデートプログラムの先頭番地のために用意された通常のデータを書き込む処理を行なう（ステップＳ１５０）。以上で、アップデートプログラムのすべてが、不揮発性メモリ３０のアップデートプログラム用のアドレス（０ｘ００００００００〜０ｘ７ＥＦＦＦＦＦＦ）に書き込まれたことになる。
【００２７】
そこで、ＭＰＵ２０は、アップデートプログラムが不揮発性メモリ３０に正常に書き込まれたとして、アドレス変換回路９０を構成するラッチ５０にポートＰＥ１から信号を出力して、ラッチ５０をリセットする処理を行なう（ステップＳ１６０）。この処理は、後述するように、アップデートプログラムの不揮発性メモリ３０への書き込みが正常に完了しなかった場合に意味を持つ処理であり、正常に終了している場合は、もともとラッチ５０がセットされていないので、特に何も生じない。この処理の意味は後で再度説明する。
【００２８】
以上の処理の終了後、ＭＰＵ２０は、自らをリセットするコマンドを実行する。この結果、ＭＰＵ２０は、システムをリスタートさせる。システムのリスタートは、このように、アップデートプログラムの書換が正常に完了した場合に生じるが、これ以外に、制御装置１０に対する電源供給の遮断と供給の再開などによっても生じる。システムがリスタートされると、ＭＰＵ２０は、内部のレジスタなどを初期化する。初期化の処理により、他のレジスタやカウンタと共に、プログラムカウンタＰＣの値も０に初期化される。このため、システムがリスタートされると、ＭＰＵ２０は、不揮発性メモリ３０の先頭番地、即ち％００にアクセスする。この処理は、プログラムによりＭＰＵ２０が不揮発性メモリ３０の先頭番地のデータを読み出すという意味ではなく、プログラムカウンタＰＣの値に従って、不揮発性メモリ３０の先頭番地のデータが読み出される処理、いわゆるフェッチ処理によるアクセスという意味である。読み出されたデータには、ＭＰＵ２０にとってのオペレータとオペランドが含まれており、ＭＰＵ２０はこれを解釈して、プログラムの最初のコマンドを実行するのである。
【００２９】
以上は、不揮発性メモリ３０の％００以下に正常なプログラムが格納されている場合である。仮に、アップデートプログラムを不揮発性メモリ３０に書き込んでいる最中に制御装置１０の電源が落ちるといった事態が生じてプログラムのアップデートが正常に行なわれなかったとする。この場合、電源が復旧して、ＭＰＵ２０が起動し、不揮発性メモリ３０の先頭アドレスから処理を開始しても、処理は正常に行なわれないことになる。こうした場合に備えて、不揮発性メモリ３０のアドレス％８０〜％ＦＦには、バックアップ用のプログラムが格納されていることは既に説明した。
【００３０】
アップデートが正常に完了した場合と、正常に完了できなかった場合とを含めて、ＭＰＵ２０の動作を図４に示した遷移図を用いて説明する。遷移図を使って説明するのは、起動時の動作は、ＭＰＵ２０の処理のみならず、アドレス変換回路９０の動作によって状態が変わるからである。電源リセット（状態Ｔ１）がかかった状態を起点として、ＭＰＵ２０，不揮発性メモリ３０を含めて制御装置１０全体の状態の遷移を追っていく。電源リセットがかかると、ＭＰＵ２０は起動する（状態Ｔ２）。起動処理、つまり内部レジスタの初期化などの処理が完了すると、ＭＰＵ２０の状態はアクセス先頭番地へのアクセスを行なう状態となる（状態Ｔ３）。
【００３１】
アップデートが全く行なわれていないか、アップデートが行なわれて正常に終了した場合には、起動直後にＭＰＵ２０が不揮発性メモリ３０のアクセス先頭番地にアクセスすると、先頭番地からはデータ判定用データＤＸとは異なるデータが読み出されるから、検出ユニット４０は、検出動作を行なわず、ラッチ５０はリセット状態（Ｑ＝０）のままに維持される。この結果、図２に示したように、アドレスラインＡ３１はデフォルト、すなわちＸＮＯＲ回路６０の出力として不揮発性メモリ３０のアドレスラインＭＡ３１に、ＭＰＵ２０のアドレスラインＡ３１と同じ信号が入力される。このため、ＭＰＵ２０がアドレス％００〜％７Ｆをアクセスしていれば、不揮発性メモリ３０のアドレス％００〜％７Ｆが正しくアクセスされる。この結果、ＭＰＵ２０は、機器処理プログラムを、内蔵しているプログラムカウンタＰＣの値に従って順次処理していく（状態Ｔ４）。
【００３２】
この状態は、ＭＰＵ２０が図３に示したステップＳ１２０においてアップデートなしと判断している限り継続される。他方、ステップＳ１２０で、アップデートありと判断されると、ＭＰＵ２０は、アップデートプログラムを外部のサーバ８０からダウンロードし、これを不揮発性メモリ３０のアドレス％００〜０ｘ７ＥＦＦＦＦＦＦにロードする（状態Ｔ５）。このとき、図３に示したように、ＭＰＵ２０は、まず先頭番地％００に、書換中フラグに相当するデータ判定用データＤＸを書き込み（ステップＳ１３０）、その後、０ｘ０００００００１〜０ｘ７ＥＦＦＦＦＦＦにアップデートプログラムを書き込み（ステップＳ１４０）、最後に先頭番地％００にアップデートプログラムの先頭番地のデータを書き込み（ステップＳ１５０）、アドレス変換回路９０をリセットして（ステップＳ１６０）、システムリセット、つまり再起動する。上述した状態Ｔ５は、図３に示したステップＳ１３０〜Ｓ１６０の処理に相当する。
【００３３】
この結果、ＭＰＵ２０は、状態Ｔ２に遷移し、再度状態Ｔ３以下を辿る。状態Ｔ５でアップデートプログラムを不揮発性メモリ３０に格納している途中で、制御装置１０の電源が遮断されたりした場合は、制御装置１０は、電源リセット（状態Ｔ１）から再度動作する。この場合、ＭＰＵ２０が起動し（状態Ｔ２）、アクセス先頭番地をアクセスすると（状態Ｔ３）、先頭番地からはデータ判定用データＤＸが読み出されるから、検出ユニット４０は、これを検出し、ラッチ５０に対してセット信号Ｓを出力する。この結果、ラッチ５０はセット状態（Ｑ＝１）にセットされ、図２に示したように、アドレスラインＡ３１は反転状態となる（状態Ｔ６）。同時にリセット信号ＲＳＴがＭＰＵ２０に出力されるので、ＭＰＵ２０は再起動する（状態Ｔ２）。
【００３４】
再起動しても、ラッチ５０がセット状態となっていることに変わりはないので、アドレスラインＡ３１は引き続き反転される。つまり、ＸＮＯＲ回路６０の出力が接続された不揮発性メモリ３０のアドレスラインＭＡ３１には、ＭＰＵ２０のアドレスラインＡ３１を反転した信号が入力される。不揮発性メモリ３０のアドレスラインＭＡ３１の信号が、ＭＰＵ２０のアドレスラインＡ３１の信号を反転したものになると、ＭＰＵ２０が、アドレス範囲０ｘ００００００００〜０ｘ７ＥＦＦＦＦＦＦに対してアクセスしても、実際には、０ｘ８０００００００〜０ｘＦＥＦＦＦＦＦＦをアクセスすることになる。このため、再起動直後に、ＭＰＵ２０が不揮発性メモリ３０の先頭アドレス％００をアクセスすると、アドレス％８０にアクセスすることになり、バックアッププログラムが実行されることになる（状態Ｔ７）。ＭＰＵ２０からみれば、不揮発性メモリ３０の先頭アドレス％００から通常の機器制御プログラムを、実行しているのと変わらないが、実際には、バックアッププログラムが実行されていることになる。
【００３５】
バックアッププログラムも、外部機器を制御する通常の処理と変わらない処理を行なう。つまり図２に示した処理を実行する。従って所定のタイミングで、アップデートがあるか否かを確認し、なければ、状態Ｔ７を継続する。アップデートがあれば、アップデートプログラムのロードを行なう（状態Ｔ５）。その処理は、図３に示したステップＳ１３０〜Ｓ１６０の処理に相当するが、一点のみ、通常の制御プログラムが実行するアップデート処理とは異なる。それは、バックアッププログラムにおけるアップデート処理は、％８０〜０ｘＦＥＦＦＦＦＦＦまでに、アップデートプログラムをロードするという点である。バックアッププログラムを実行しているときも、ラッチ５０はセット状態とされており（Ｑ＝１）、アドレスラインＡ３１は反転されているから、バックアッププログラムの実行中、プログラムカウンタＰＣは、％００〜％７Ｆのアドレス範囲を指し示している。アップデートプログラムは、不揮発性メモリ３０のこのアドレス範囲にロードさせなければならないが、アドレスラインＡ３１が反転されているので、アップデートのためのローダが、アドレス範囲０ｘ８０００００００〜０ｘＦＥＦＦＦＦＦＦに、アップデートプログラムをロードすれば、結果的には、アドレス範囲０ｘ００００００００〜０ｘ７ＥＦＦＦＦＦＦにアップデートプログラムがロードされることになる。
【００３６】
こうしたアップデートプログラムのロードが完了すると、ＭＰＵ２０は、アドレス変換回路９０をリセットする処理を行なう。具体的には、出力ポートＰＥ１をハイレベルとしてラッチ５０をリセット（Ｑ＝０）するのである。そして、ＭＰＵ２０は自らをリセットし、再起動する（状態Ｔ２）。アップデートプログラムが正常に不揮発性メモリ３０にロードされていれば、再起動直後に不揮発性メモリ３０の先頭番地をアクセスすると（状態Ｔ３）、アドレス変換回路９０をリセットしていることから、アドレスラインＡ３１はデフォルト状態となっており、かつ先頭アドレスのデータは正常なデータとなっているので、ＭＰＵ２０は、機器処理プログラムをプログラムカウンタＰＣに従って順次処理する（状態Ｔ４）。以下は、既に説明した通りである。
【００３７】
アップデートの途中で電源断などが生じて正常にアップデートが完了できなかった場合のシーケンスを、図５のタイミングチャートに例示した。図５に示したように、アップデートの最中に電源断となり（タイミングｔ１）、その後、電源がオンとなると（タイミングｔ２）、ＭＰＵ２０からのアドレスラインＡ０〜Ａ３１は全て０となり、またデータラインＭＤ０〜ＭＤ３１には、データ判定用データＤＸが現れる。検出ユニット４０はこれを検出し（タイミングｔ３）、信号Ｓを所定時間ハイレベルとし、かつリスタート信号ＲＳＴを一定時間ロウレベルとする。信号Ｓがハイレベルとなることで、ラッチ５０の出力Ｑはハイレベルに保たれる。
【００３８】
その後、リスタート信号ＲＳＴがハイレベルに戻ると（タイミングｔ４）、ＭＰＵ２０は起動される。このとき、ＭＰＵ２０は不揮発性メモリ３０の先頭アドレス％００にアクセスするが、ラッチ５０の出力Ｑがハイレベルとなっているので、アドレスＡ３１は反転している。このため、バックアッププログラムが実行される。バックアッププログラムを実行することで、再度アップデートが行なわれ、正常に終了すると、ＭＰＵ２０は、出力ポートＰＥ１をハイレベルにすることで、ラッチ５０の入力Ｒがハイレベルとなり、ラッチ５０の出力Ｑはロウレベルに戻る（タイミングｔ５）。このとき、再度ＭＰＵ２０はリスタートされ、アドレスの反転は解除されて、不揮発性メモリ３０の先頭アドレス％００から制御処理が実行される。
【００３９】
以上説明した第１実施形態によれば、アップデートを行なうとき、アップデートプログラムが書き込まれる不揮発性メモリ３０の領域の先頭アドレス％００に、通常のデータとは異なるデータ判定用データＤＸ書き込んでから、アドレス０ｘ０００００００１以降のアドレスにアップデートプログラムを書き込み、最後に、先頭アドレスのデータを、正常なアップデートプログラムのテータに書き戻している。従って、アップデートの途中で電源断などの理由で処理が中断し、アップデートが正常に終了しなかった場合、これを直ちに検出することができる。しかも、このとき、検出ユニット４０は、ラッチ５０をセットし、アドレスバスＡＤの最上位であるアドレスラインＡ３１を反転するので、ＭＰＵ２０は、バックアッププログラムが格納された％８０から、処理を実行することができる。
【００４０】
しかも、バックアッププログラムによって、アップデートが正常に行なわれると、アドレス反転を解除して、再度リスタートする。従って、ＭＰＵ２０は、アップデートに一度失敗しても、人手を全く介することなく、バックアッププログラムを起動でき、かつバックアッププログラムの中で再度アップデートを試み、アップデートが正常に終了すれば、アップデートしたアップデートプログラムに処理を移して、正常に、機器の制御を継続することができる。このため、アップデートの最中に不具合が生じると再起動して、少なくともバックアッププログラムを起動できるので、機器組込型の制御機器などであっても、自動アップデートの機能を組み込むことが可能となる。
【００４１】
Ｂ.第２実施形態：
次に第２実施形態について説明する。第２実施形態の制御装置１２は、図６に示したように、第１実施形態と同様に、ＭＰＵ２０と不揮発性メモリ３０とアドレス変換回路９２を備える。第２実施形態では、アドレス変換回路９２以外は、第１実施形態と同じ構成を備える。不揮発性メモリ３０のアドレス領域や、通常の制御プログラムがアドレス領域％００〜％７Ｆに置かれていること、バックアッププログラムがアドレス領域％８０〜％ＦＦに置かれていることも同様である。なお、図６では、外部サーバなどの図示は省略した。
【００４２】
第２実施形態のアドレス変換回路９２は、図示するように、検出ユニット４０に代わるエラー検出回路４１を備え、その出力がラッチ５０に接続されていること、ラッチ５０の出力によりＸＮＯＲ回路６０によりアドレスラインＡ３１が、必要に応じて反転されることなども第１実施形態と同様である。
【００４３】
エラー検出回路４１は、ＭＰＵ２０が実行できないコマンドを実行しようとした場合にＭＰＵ２０から出力される信号ＥＤ１を入力Ｑ１として動作する。ＭＰＵ２０が実行できないコマンドとは、例えば値０で割り算する処理などが知られているが、それだけでなく、ＭＰＵ２０が不揮発性メモリ３０のアドレスからフェッチサイクルにおいて読み込んだ３２ビットのデータのオペレータが、解釈できないコードである場合なども含まれる。本実施形態のＭＰＵ２０は、３２ビットのデータのうち、先頭の１６ビットをオペレータとし、残りの１６ビットをデータとして解釈するが、先頭の１６ビットのすべてのコードに、実行可能なコマンドが割り当てられている訳ではない。ＭＰＵ２０は、こうした割り当てられていないコードがオペレータに現れた場合、カーネルの動作としてこれを検出し、ポートＥＤ１をハイレベルに反転する。
【００４４】
通常のプログラムでは、こうした割り当てられていないコードがオペレータに現れることはないが、プログラムが暴走した場合などには、プログラムカウンタＰＣの値に従って、不揮発性メモリ３０からデータを読み込むと、オペレータ部分が実行できないコードになっていることが生じる。つまり、第１実施形態で説明したように、アップデートの途中で電源が遮断されるなどの理由でアップデートが正常に終了しないまま、電源が回復してＭＰＵ２０が再起動されると、ＭＰＵ２０はアップデートが不完全なままのプログラムを実行することになるので、何処かで暴走する。第１実施形態のように、アップデートの先頭で所定のデータ判定用データＤＸを書き込むものとし、このデータ判定用データのオペレータに相当する部分をこうした実行できないコードにしておけば、不完全なアップデートの後でＭＰＵ２０が再起動すると、不揮発性メモリ３０の先頭アドレスを読みにいくから、ＭＰＵ２０はこれを検出し、ポートＥＤ１をハイレベルに反転する。
【００４５】
エラー検出回路４１は、このポートＥＤ１がハイレベルになったことを入力Ｑ１により検出し、第１実施形態の検出ユニット４０と同様、ラッチ５０の入力端子Ｓに接続された出力ＰＤ１を短い時間ハイレベルとし、それより長い時間、リセット信号ＲＳＴをロウレベルとする。両者の関係は、図５の信号Ｓとリセット信号ＲＳＴと同様である。この結果、ラッチ５０はセットされ、その出力Ｑはハイレベルに設定され、ＭＰＵ２０はリセットされ、リセット信号ＲＳＴがハイレベルに戻ったところで再起動される。
【００４６】
この場合の制御装置１２の状態の遷移を図７に示した。各状態Ｔ１〜Ｔ７は、図４に示した第１実施形態の状態と比較すると、本実施形態では、ＭＰＵ２０が先頭番地にアクセスしたことによる判定（状態Ｔ３）が存在しない。また、状態Ｔ４に代えて、状態Ｔ４１が置かれている点で、第１実施形態と異なる。
【００４７】
第２実施形態の制御装置１２は、起動すると（状態Ｔ２）、アドレス変換回路９２によるアドレスの変換が行なわれていないデフォルトの状態では、状態Ｔ４１に遷移し、機器処理プログラムをプログラムカウンタＰＣの値に従って順次実行する。ここで、アップデートが正常に行なわれなかったなどの理由で、ＭＰＵ２０が実行できないオペレータを検出すると、ポートＥＤ１が反転するので、エラー検出が行なわれ、アドレス変換回路９２によりアドレスラインＡ３１を反転する処理が行なわれる（状態Ｔ６）。そしてＭＰＵ２０は再起動される（状態Ｔ２）。上記以外の処理、状態の遷移は第１実施形態と同様である。
【００４８】
以上説明した第２実施形態によれば、アップデートが正常に終了しなかった場合には、不揮発性メモリ３０に記憶された処理プログラムは実行できないオペレータを含むことになり、ＭＰＵ２０はこれを検出してアドレス変換回路９２によりアドレスラインＡ３１の変換がなされるようにして再起動する。この結果、ＭＰＵ２０は、自動的にアドレス％８０以下に格納されたバックアッププログラムを実行することができる。
【００４９】
第２実施形態では、再起動直後に不揮発性メモリ３０の先頭アドレスにデータ判定用データＤＸが書かれているか否かを判定する回路（第１実施形態の検出ユニット４０）を設ける必要がない。従って、アドレスバスＡＤやデータバスＤＤをアドレス変換回路９２に引き回す必要がなく、回路構成を単純なものとすることができる。また、アップデートが不完全なまま終了した場合の検出だけでなく、プログラム自体のエラーなどにも対応できるという利点がある。その余については、第１実施形態の作用効果と同様である。
【００５０】
Ｃ．第３実施形態:
次に本発明の第３実施形態について説明する。第３実施形態の制御装置１３は、図８に示したように、第１，第２実施形態と同様に、ＭＰＵ２０と不揮発性メモリ３０とアドレス変換回路９３を備える。第３実施形態では、アドレス変換回路９４以外は、第１，第２実施形態と同じ構成を備える。不揮発性メモリ３０のアドレス領域や、通常の制御プログラムがアドレス領域％００〜％７Ｆに置かれていること、バックアッププログラムがアドレス領域％８０〜％ＦＦに置かれていることも同様である。なお、図８でも、外部サーバなどの図示は省略した。
【００５１】
第３実施形態のアドレス変換回路９３は、図示するように、検出ユニット４０に代わるウォッチドッグタイマ（以下、ＷＤＴと呼ぶ）４３とタイマ回路４５を備え、）４３の出力がラッチ５０に接続されていること、ラッチ５０の出力によりＸＮＯＲ回路６０によりアドレスラインＡ３１が、必要に応じて反転されることなども第１，第２実施形態と同様である。
【００５２】
ＷＤＴ４３は、良く知られた回路構成なので、その内部動作については詳しい説明は省略するが、ＷＤＴ４３は、いわゆるリトリガブルなワンショットマルチバルブレータとして構成されており、内部のタイマによる所定の時間が経過する前に、ＭＰＵ２０からトリガ信号が端子Ｑに繰り返し入力されていれば、何らの信号も出力しない。ＭＰＵ２０からの信号が内部のタイマによる所定の時間が経過するまで入力されないと、ＷＤＴ４３は、第２実施形態のエラー検出回路４１と同様、ラッチ５０の入力端子Ｓに接続された出力ＰＤ１を短い時間ハイレベルとし、それより長い時間、リセット信号ＲＳＴをロウレベルとする。両者の関係は、図５の信号Ｓとリセット信号ＲＳＴと同様である。この結果、ラッチ５０はセットされ、その出力Ｑはハイレベルに設定され、ＭＰＵ２０はリセットされ、リセット信号ＲＳＴがハイレベルに戻ったところで再起動される。なお、タイマ回路４５は、電源投入後、所定期間、ＷＤＴ４３の動作を抑制するために設けられている。電源投入直後は、ＭＰＵ２０の処理が整うまで、一定の時間が必要になるからである。
【００５３】
第３実施形態におけるＭＰＵ２０側の処理について図９を用いて説明する。ＭＰＵ２０が実行する図９の処理は、基本的には図３の処理と同様であり、機器制御処理（ステップＳ１００）の内部に、時間ΔＴの経過を判断して（ステップＳ１０５）、時間ΔＴの経過毎に、ポートＰＥ１をハイレベルにする処理（ステップＳ１０７）を組み込んだ点を除き、同一である。図９では、図３のステップＳ１００の処理を、機器制御の開始（ステップＳ１０１）から機器制御の終了（ステップＳ１０９）までの繰り返しの処理として記載した。この間、ＭＰＵ２０は、上述した時間ΔＴの経過の判断等の他は、プログラムカウンタＰＣの値に従って、順次機器制御を行なっている。
【００５４】
このようにＭＰＵ２０が所定の経過時間ΔＴ毎にポートＰＥ１を短い時間ハイレベルにすることから、ＷＤＴ４３はその度にワンショットの信号出力をトリガされることになり、出力端子ＰＤ１やリセット端子ＲＳＴなどの状態は変化しない。
【００５５】
他方、アップデートの処理（ステップＳ１３０以下）が正常に行なわれず、ステップＳ１３０のアドレス％００以下にロードされたアップデートプログラムが不完全であれば、ＭＰＵ２０は正常な処理を行なえないから、ステップＳ１０５の判定やポートＰＥ１の出力をハイレベルにする処理（ステップＳ）１０７）が行なえず、ＷＤＴ４３のトリガ端子Ｑ１を繰り返しトリガすることができなくなる。そのような状態になると、ＷＤＴ４３は、予め定めたワンショットの時間が経過すると、ラッチ５０の入力端子Ｓに接続された出力ＰＤ１を短い時間ハイレベルとし、それより長い時間、リセット信号ＲＳＴをロウレベルとする。この結果、ラッチ５０はセットされ、その出力Ｑはハイレベルに設定され、ＭＰＵ２０はリセットされ、リセット信号ＲＳＴがハイレベルに戻ったところで再起動される。
【００５６】
以上説明した第３実施形態の制御装置１３によれば、第２実施形態とほぼ同様の作用効果を奏する。第３実施形態では、ＭＰＵ２０が正常に動作できないことをＷＤＴ４３により検出しているので、第２実施形態のような読み込んだデータのオペレータが実行できないコードであることを内部で検出する機構がないＭＰＵや検出しても検出結果を外部に出力するポートを有しないＭＰＵでも、アップデートが正常に終了できなかったことを検出して対応することができる。
【００５７】
特に説明しないが、バックアッププログラムの管理下でのアップデートが行なわれ、これが正常に完了すれば、ＭＰＵ２０は、ポートＰＥ２を用いてアドレス変換回路９３をリセットする。従って、一旦アップデートに失敗しても、再度のアップデートを試み、正常にアップデートが完了すれば、アドレスラインの反転は元に復し、アップデートされた後のプログラムにより、機器の制御が行なわれる。これらの一連の処理を自動的に行なえることは、第１，第２実施形態と同様である。
【００５８】
第３実施形態では、アップデート処理（ステップＳ１３５）において、第１実施形態と同様に、先頭アドレスに一旦書換中フラグに相当するデータ判定用データＤＸを書き込むといった処理を行なっても良いし、行なわなくてもよい。
【００５９】
Ｄ．その他の実施形態:
上記の実施形態では、バックアッププログラムの中でもアップデートを試みるものしたが、バックアッププログラム内ではアップデートを行なわず、バックアッププログラムを実行中であることを管理者等に報知するものとしてもよい。管理者は、適当なタイミングで、制御装置１０等を停止し、マニュアルでアップデートを行なえば良い。アップデートプログラムは、サーバからネットワークを介してダウンロードするものに限られず、直接上位のコンピュータなどからデータを受け取って行なうものとしてもよい。こうしたコンピュータとの接続は、ＲＳ−２３２ＣやＲＳ−４２２、あるいはＵＳＢ，ＳＴＡなどのシリアル転送によってもよいし、ＳＣＳＩなどのパラレル転送によってもよい。また、有線に限らず、無線による通信を利用してアップデートを行なっても差し支えない。
【００６０】
アドレス変換回路９０等では、ＸＮＯＲ回路６０を用いてアドレスラインＡ３１を反転するものとしたが、データセレクタなどを用いて同様の回路を実現することも容易である。また、アドレス領域％００〜％７Ｆとアドレス領域％８０〜％ＦＦとを、異なるフラッシュメモリのチップに割り当て、チップセレクト信号を入替えることで、アドレス変換としてもよい。
【００６１】
アップデートは、制御プログラム自体を書き換えるものとして説明したが、場合によっては制御に用いるデータのみを書き換える場合も存在する。こうした場合でも、データが例えばプログラムのポインタなどであれば、書き換えが正常に終了しなければ、プログラムが正常に動作できない場合がある。こうしたデータについては、制御プログラムの一部とみなすことができるから、データのアップデートについても、本発明を適用することができる。
【００６２】
以上、本発明のいくつかの実施形態について説明したが、本発明はこれらの実施形態に限定されるものではなく、種々なる態様で実施し得ることは勿論である。例えば、ＭＰＵが扱うアドレス空間は、更に広いものであってもあるいはもっと狭いものであっても差し支えない。また機器組込用以外のプログラム実行装置に適用することも可能である。
【符号の説明】
【００６３】
１０，１２，１３…制御装置、３０…不揮発性メモリ、４０…検出ユニット、４１…エラー検出回路、４３…ＷＤＴ（ウォッチドッグタイマ）、４５…タイマ回路、５０…ラッチ、６０…ＸＮＯＲ回路、７０…ネットワーク、８０…外部サーバ、９０，９２，９３…アドレス変換回路
【図１】
2018180608.tif 000003
【図２】
2018180608.tif 000004
【図３】
2018180608.tif 000005
【図４】
2018180608.tif 000006
【図５】
2018180608.tif 000007
【図６】
2018180608.tif 000008
【図７】
2018180608.tif 000009
【図８】
2018180608.tif 000010
【図９】
2018180608.tif 000011