次に、本発明の実施形態について図面を参照して説明する。
[第1の実施形態]
図1は、本発明の通信装置の第1の実施形態を示すブロック図である。
なお、本実施形態における通信装置とは、携帯電話機やPHS端末、或いは、スマートフォンなどの移動体通信端末を指すものとする。或いは、通信装置は、通信機能を有するタブレット型端末や、通信機能を有するパーソナルコンピュータなど、であってもよい。
図1に示す通信装置100は、通信部10、不揮発性メモリ20、不揮発性メモリ30、動作用メモリ40、制御部50を備えている。
通信部10は、通信装置100の外部との通信を行う部分であり、制御部50から出力される音声やテキスト或いは映像などのデータを外部へ送信し、外部から受信するデータを制御部50に送出する。通信部10は、無線によって外部との通信を行うものであってもよいし、有線によって外部との通信を行うものであってもよい。
不揮発性メモリ20は、通信装置100を動作させるためのプログラムコードを格納するメモリである。そして、不揮発性メモリ20は2つのメモリ領域、すなわち、#1メモリ領域21と#2メモリ領域22、を有している。#1メモリ領域21には通信装置100を動作させるための第1のプログラムコード、すなわち、#1プログラムコード、が格納される。また、#2メモリ領域22には通信装置100を動作させるための第2のプログラムコード、すなわち、#2プログラムコード、が格納される。なお、不揮発性メモリ20は、図示しないブートローダ(boot loader)も格納しているものとする。ブートローダは、周知のように、通信装置100の電源投入後に、#1メモリ領域21或いは#2メモリ領域22の何れかのプログラムコードを動作用メモリ40に読み込むためのプログラムである。
不揮発性メモリ20は、メモリの内容を書き換え可能で、かつ、電源を切ってもメモリ内のデータが消えない半導体メモリであるところのフラッシュメモリ(flash memory)で構成されるとよい。
本実施形態においては、#1プログラムコードを格納する#1メモリ領域21を、運用面とし、#2プログラムコードを格納する#2メモリ領域22を、退避面とするものとする。なお、運用面のプログラムコードは、通信装置100を起動させる際、優先的に動作用メモリ40に展開されるようにしている。そして、運用面のプログラムコードでの起動が失敗した場合には、退避面のプログラムコードで通信装置100を起動させるようになっている。つまり、通信装置100の電源投入後には、優先的に運用面のプログラムコードで通信装置100の起動を行い、運用面のプログラムコードでの起動が失敗した場合には、退避面のプログラムコードで通信装置100の起動を行わせるようにしている。
不揮発性メモリ30は、回数をカウントして記憶する2つのカウンタ、すなわち、#1カウンタ31と#2カウンタ32、を格納するメモリである。#1カウンタ31は、#1メモリ領域21の#1プログラムコードで通信装置100の起動を行い、その起動が失敗した場合の失敗回数を記憶する。また、#2カウンタ32は、#2メモリ領域22の#2プログラムコードで通信装置100の起動を行い、その起動が失敗した場合の失敗回数を記憶する。
動作用メモリ40は、通信装置100を動作させるプログラムコードを記憶するメモリである。そして、動作用メモリ40に記憶されるプログラムコードを実行することにより、通信装置100の動作が行われるようになっている。なお、動作用メモリ40に記憶されるプログラムコードは、#1メモリ領域21の#1プログラムコードか、或いは、#2メモリ領域22の#2プログラムコードの何れか一方のプログラムコードである。なお、動作用メモリ40は、メモリの内容を書き換え可能であるが、電源を切った場合にはメモリ内のデータが失われるRAM(random access memory:ラム)で構成される。
制御部50は、通信装置100全体の動作制御を行い、CPU(central processing unit:中央処理装置)を備えている。特に、制御部50は、通信装置100の電源投入時に、不揮発性メモリ20内の運用面に格納されている#1プログラムコードを動作用メモリ40に展開し記憶させる。そして、動作用メモリ40に記憶されたプログラムコードを動作させることにより、通信装置100の起動を行う。通信装置100の起動が成功した場合には、そのまま、通信装置100の動作を継続させる。通信装置100の起動が失敗した場合には、その失敗回数を不揮発性メモリ30の#1カウンタ31に記憶させる。次に、再度、運用面に格納されている#1プログラムコードを動作用メモリ40に展開し記憶させ、通信装置100の起動を行う。ここでも通信装置100の起動が失敗した場合には、その失敗回数を不揮発性メモリ30の#1カウンタ31に記憶させる。そして、#1カウンタ31に記憶された失敗回数が、予め定めておいた閾値を超えた場合には、不揮発性メモリ20内の退避面に格納されている#2プログラムコードを動作用メモリ40に展開し記憶させるよう動作する。
次に、図2を参照して、本実施形態の動作について説明する。
図2は、第1の実施形態の動作について説明するフローチャートである。
なお、本実施形態においては、上述したように、#1プログラムコードを格納する#1メモリ領域21を、運用面とし、#2プログラムコードを格納する#2メモリ領域22を、退避面とするものとする。そして、#1メモリ領域21には、通信装置100の外部のサーバなどからダウンロードしたプログラムコードが、#1プログラムコードとして格納されているものとする。また、#2メモリ領域22には、#1プログラムコードでの通信装置100の起動が失敗した場合に、通信装置100を確実に起動させ得る緊急用のプログラムコードが、#2プログラムコードとして格納されているものとする。さらに、#1プログラムコードでの起動の失敗回数を記憶する#1カウンタ31、及び、#2プログラムコードでの起動の失敗回数を記憶する#2カウンタ32、の内容は、共に「0」であるものとする。
図2において、図1に示した通信装置100の電源が投入されると(図2のステップS1)、通信装置100の制御部50は以下のように動作する。
すなわち、制御部50は、不揮発性メモリ30に記憶されている起動の失敗回数について、運用面からチェックを行う。つまり、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値(例えば、「2」であるとする)を超えているか否かの判定を行う(ステップS2)。
起動の失敗回数が閾値を超えてはいない場合(ステップS2でNo)、#1カウンタ31の内容を「1」だけインクリメントする(ステップS3)。そして、運用面の#1プログラムコードを、動作用メモリ40に展開し記憶させる(ステップS4)。次に、#1プログラムコードの動作用メモリ40への展開が成功したか否かの判定を行う(ステップS5)。展開が成功したか否かの判定は、不揮発性メモリ20のブートローダが正常に終了した場合に成功したものとし、ブートローダが正常に終了しなかった場合には不成功と判定するものとする。
展開が不成功であった場合(ステップS5でNo)、ステップS2に戻り、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
展開が成功した場合(ステップS5でYes)、動作用メモリ40に展開したプログラムコードで、通信装置100の起動処理を行う(ステップS6)。そして、通信装置100の起動が成功したか否かの判定を行う(ステップS7)。起動が成功したか否かの判定は、通信装置100が、起動後に最初に行うべき動作を開始した場合に起動が成功したものと判定するようにすればよい。起動後に最初に行うべき動作とは、例えば、通信装置100がメニュー画面を表示する、といった動作のことである。
起動が成功しなかった場合(ステップS7でNo)、ステップS2に戻り、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
起動が成功した場合(ステップS7でYes)、#1カウンタ31の内容を「0」に戻し(ステップS8)、通信装置100の動作をそのまま継続させることにより、通信装置100に通信機能を提供させるよう動作させる(ステップS9)。
なお、本実施形態においては、上述したように、展開が不成功であった場合(ステップS5でNo)や起動が成功しなかった場合(ステップS7でNo)には、ステップS2に戻るようにしている。これは、#1プログラムコードが何らかの理由により不正なプログラムコードになっていることを示しており、通信装置100を正常に起動させることができない場合を示すものである。そして、ステップS2以降の動作を繰り返すことにより、#1カウンタ31の値は、いつか閾値を超えるようになる。#1カウンタ31の値が閾値を超えた場合には、制御部50は、運用面の#1プログラムコードによる通信装置100の正常な起動に失敗したものと見なすよう動作する。そして、制御部50は、後述するように、退避面の#2プログラムコードによる通信装置100の起動に切り替えるよう動作するようになる。
図2に戻り、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えている場合(ステップS2でYes)、退避面での起動の失敗回数を示す#2カウンタ32のチェックを行う。すなわち、#2カウンタに記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う(ステップS12)。
起動の失敗回数が閾値を超えている場合(ステップS12でYes)、制御部50は動作を終了し、通信装置100の起動を行わない。この場合は、運用面と退避面のプログラムコードが共に不正なプログラムコードであったことを示している。
起動の失敗回数が閾値を超えてはいない場合(ステップS12でNo)、#2カウンタ32の内容を「1」だけインクリメントする(ステップS13)。そして、退避面の#2プログラムコードを、動作用メモリ40に展開し記憶させる(ステップS14)。次に、#2プログラムコードの動作用メモリ40への展開が成功したか否かの判定を行う(ステップS15)。
展開が不成功であった場合(ステップS15でNo)、ステップS12に戻り、#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
展開が成功した場合(ステップS15でYes)、動作用メモリ40に展開したプログラムコードで、通信装置100の起動処理を行う(ステップS16)。そして、通信装置100の起動が成功したか否かの判定を行う(ステップS17)。
起動が成功しなかった場合(ステップS17でNo)、ステップS12に戻り、#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
起動が成功した場合(ステップS17でYes)、#2カウンタ32の内容を「0」に戻し(ステップS18)、通信装置100の動作をそのまま継続させることにより、通信装置100に通信機能を提供させるよう動作させる(ステップS19)。
以上説明したように、第1の実施形態においては、制御部50は、運用面の#1プログラムコードで通信装置100が起動するか否かの監視を行っている。そして、#1プログラムコードでの通信装置100の起動が失敗した場合は、退避面の#2プログラムコードで通信装置100を起動させるよう切り替えるようになっている。従って、退避面に緊急用のプログラムコードを格納しておくことで、通信装置100を確実に起動させることが出来る。
以上、本発明の第1の実施形態の動作について説明した。
尚、上述した実施形態においては、通信装置100の不揮発性メモリ20は、2つのメモリ領域(#1メモリ領域21、#2メモリ領域22)を有する、として説明したが、これを以下のように変更してもよい。
すなわち、不揮発性メモリ20は複数のメモリ領域、すなわち、#1メモリ領域、#2メモリ領域、・・・、#nメモリ領域、を有するものとする。そして、複数のメモリ領域の各々には、通信装置100を動作させるためのプログラムコード、すなわち、#1プログラムコード、#2プログラムコード、・・・、#nプログラムコード、が格納される。ここで、#1プログラムコードを格納する#1メモリ領域を、運用面とする。そして、#2プログラムコードを格納する#2メモリ領域を第1優先の退避面、#3プログラムコードを格納する#3メモリ領域を第2優先の退避面、とする(以下同様)。
この変更に伴い、不揮発性メモリ30は、複数のカウンタ、すなわち、#1カウンタ、#2カウンタ、・・・、#nカウンタ、を格納するように変更する。ここで、複数のカウンタ(#1カウンタ、#2カウンタ、・・・、#nカウンタ)の各々は、複数のメモリ領域(#1メモリ領域、#2メモリ領域、・・・、#nメモリ領域)の各々に対応しているものとする。
そして、通信装置100の制御部50は、通信装置100を起動する際、以下のように動作する。
すなわち、制御部50は、運用面の#1プログラムコードで通信装置100が起動するか否かの監視を行っている。そして、#1プログラムコードでの通信装置100の起動が失敗した場合は、第1優先の退避面の#2プログラムコードで通信装置100を起動させるよう切り替える。この時さらに、制御部50は、第1優先の退避面の#2プログラムコードで通信装置100が起動するか否かの監視を行う。そして、#2プログラムコードでの通信装置100の起動が失敗した場合は、第2優先の退避面の#3プログラムコードで通信装置100を起動させるよう切り替える。以下同様に動作するようにする。
ここで、第1優先の退避面に、第1の緊急用のプログラムコードを格納し、第2優先の退避面に、第2の緊急用のプログラムコードを格納(以下同様)しておく。このようにすれば、複数の緊急用のプログラムコードで通信装置100の起動を行うことが出来るため、通信装置100を、より一層確実に起動させることが出来る。
以上説明したように、本実施形態の通信装置100は、プログラムコードを格納する複数のメモリ領域(#1メモリ領域21、#2メモリ領域22、・・・)を有する第1の不揮発性メモリ(不揮発性メモリ20)を備えている。また、前記複数のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する複数のカウンタ(#1カウンタ31、#2カウンタ32、・・・)を有する第2の不揮発性メモリ(不揮発性メモリ30)を備えている。さらに、前記複数のメモリ領域の何れかのプログラムコードを展開する動作用メモリ(動作用メモリ40)と、制御部(制御部50)を備えている。そして、制御部は、前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択し、前記運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行う。ここで、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードに対応する前記複数の何れかのカウンタに格納する。そして、前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する。またさらに、外部から受信するデータを前記制御部に送出すると共に、前記制御部から出力されるデータを外部へ送信する通信部を備えている。
従って、本実施形態によれば、正常でないプログラムコードを使用して装置を起動させようとした場合であっても、そのプログラムコードが正常でないことを検出でき、元の正常なプログラムコードによって起動させることが可能となる。
[第2の実施形態]
次に、図1に示した第1の実施形態の変形例としての本発明による第2の実施形態について説明する。
第2の実施形態における通信装置は、第1の実施形態においては#1メモリ領域21に固定的であった運用面を、#1メモリ領域21或いは#2メモリ領域22の何れか一方に選択できるようにした点でのみ、第1の実施形態と異なるものである。
図3は、本発明の通信装置の第2の実施形態を示すブロック図である。図3は、図1に示した通信装置100の不揮発性メモリ30に、運用面情報記憶部33を追加した点で第1の実施形態と異なっている。従って、図3において、図1の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
図3に示す通信装置100−2は、図1と同様に、通信部10、不揮発性メモリ20、不揮発性メモリ30−2、動作用メモリ40、制御部50−2を備えている。
通信部10、不揮発性メモリ20、動作用メモリ40は、第1の実施形態と同様であるため、その説明を省略する。
不揮発性メモリ30−2は、#1カウンタ31と#2カウンタ32に加え、運用面情報記憶部33を格納している。
#1カウンタ31と#2カウンタ32は、第1の実施形態と同様であるため、その説明を省略する。
運用面情報記憶部33は、不揮発性メモリ20の#1メモリ領域21と#2メモリ領域22の何れを運用面とするか、を定める情報を記憶する。例えば、#1メモリ領域21を運用面とする場合には、運用面情報記憶部33には#1メモリ領域21が記憶される。また、#2メモリ領域22を運用面とする場合には、運用面情報記憶部33には#2メモリ領域22が記憶される。運用面情報記憶部33に記憶されないメモリ領域は退避面であるものとして扱われるようにしている。
制御部50−2は、通信装置100−2全体の動作制御を行い、CPUを備えている。特に、制御部50−2は、第1の実施形態の制御部50の動作に加え、通信装置100−2の電源投入時に、運用面情報記憶部33を参照して、運用面が#1メモリ領域21或いは#2メモリ領域22の何れであるかを判定する。そして、運用面に格納されているプログラムコードを動作用メモリ40に展開し記憶させるよう動作する。
次に、図4、図5を参照して、第2の実施形態の動作について説明する。
図4は、第2の実施形態の動作について説明する第1のフローチャートである。
なお、図4は、第2の実施形態の通信装置100−2が、外部のサーバからバージョンアップのためのプログラムコードをダウンロードし、#1メモリ領域21或いは#2メモリ領域22の何れかに格納する際の動作を示すものである。ここで、不揮発性メモリ30−2の運用面情報記憶部33には、#1メモリ領域21と#2メモリ領域22の何れを運用面とするかを定める情報が記憶されているものとする。
図4において、通信装置100−2は動作中であり、外部のサーバからバージョンアップのためのプログラムコードのダウンロードを開始したものとする。通信装置100−2の制御部50−2は、先ず、運用面情報記憶部33を参照し、運用面が#1メモリ領域21になっているか否かの判定を行う(図4のステップS21)。
運用面が#1メモリ領域21になっている場合(ステップS21でYes)、制御部50−2は、外部のサーバからバージョンアップ用プログラムコードをダウンロードし、運用面ではない退避面(#2メモリ領域22)へ格納する(ステップS22)。そして、運用面を#2メモリ領域22へ変更する(ステップS23)。すなわち、制御部50−2は、運用面情報記憶部33に#2メモリ領域22を記憶する。そして、ダウンロード処理を終了する。
一方、運用面が#1メモリ領域21になっていない場合(ステップS21でNo)、運用面は#2メモリ領域22である。そこで、制御部50−2は、外部のサーバからバージョンアップ用プログラムコードをダウンロードし、運用面ではない退避面(#1メモリ領域21)へ格納する(ステップS25)。そして、運用面を#1メモリ領域21へ変更する(ステップS26)。すなわち、制御部50−2は、運用面情報記憶部33に#1メモリ領域21を記憶する。そして、ダウンロード処理を終了する。
次に、図5を参照して、通信装置100−2の起動時の処理について説明する。
図5は、第2の実施形態の動作について説明する第2のフローチャートである。
図5において、図3に示した通信装置100−2の電源が投入されると(図5のステップS31)、通信装置100−2の制御部50−2は以下のように動作する。
すなわち、制御部50−2は、運用面情報記憶部33を参照し、運用面が#1メモリ領域21になっているか否かの判定を行う(図5のステップS31−1)。
運用面が#1メモリ領域21になっている場合(ステップS31−1でYes)、制御部50−2は、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う(ステップS32)。
起動の失敗回数が閾値を超えてはいない場合(ステップS32でNo)、制御部50−2は、第1の実施形態と同様に動作する。すなわち、制御部50−2は、#1カウンタ31の内容を「1」だけインクリメントする(ステップS33)。そして、運用面の#1プログラムコードを、動作用メモリ40に展開し記憶させる(ステップS34)。次に、#1プログラムコードの動作用メモリ40への展開が成功したか否かの判定を行う(ステップS35)。
展開が不成功であった場合(ステップS35でNo)、ステップS32に戻り、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
展開が成功した場合(ステップS35でYes)、動作用メモリ40に展開したプログラムコードで、通信装置100−2の起動処理を行う(ステップS36)。そして、通信装置100−2の起動が成功したか否かの判定を行う(ステップS37)。
起動が成功しなかった場合(ステップS37でNo)、ステップS32に戻り、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
起動が成功した場合(ステップS37でYes)、#1カウンタ31の内容を「0」に戻し(ステップS38)、通信装置100−2の動作をそのまま継続させることにより、通信装置100−2に通信機能を提供させるよう動作させる(ステップS39)。
#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えている場合(ステップS32でYes)、制御部50−2は、運用面を#2メモリ領域へ変更する(ステップS40)。すなわち、制御部50−2は、運用面情報記憶部33に#2メモリ領域22を記憶させる。そして、後述するステップS53へ進む。
運用面が#1メモリ領域21になっていない場合(ステップS31−1でNo)、運用面は#2メモリ領域22であるため、制御部50−2は、#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う(ステップS52)。
起動の失敗回数が閾値を超えてはいない場合(ステップS52でNo)、制御部50−2は、第1の実施形態と同様に動作する。すなわち、制御部50−2は、#2カウンタ32の内容を「1」だけインクリメントする(ステップS53)。そして、運用面の#2プログラムコードを、動作用メモリ40に展開し記憶させる(ステップS54)。次に、#2プログラムコードの動作用メモリ40への展開が成功したか否かの判定を行う(ステップS55)。
展開が不成功であった場合(ステップS55でNo)、ステップS52に戻り、#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
展開が成功した場合(ステップS55でYes)、動作用メモリ40に展開したプログラムコードで、通信装置100−2の起動処理を行う(ステップS56)。そして、通信装置100−2の起動が成功したか否かの判定を行う(ステップS57)。
起動が成功しなかった場合(ステップS57でNo)、ステップS52に戻り、#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
起動が成功した場合(ステップS57でYes)、#2カウンタ32の内容を「0」に戻し(ステップS58)、通信装置100−2の動作をそのまま継続させることにより、通信装置100−2に通信機能を提供させるよう動作させる(ステップS59)。
#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えている場合(ステップS52でYes)、制御部50−2は、運用面を#1メモリ領域へ変更する(ステップS60)。すなわち、制御部50−2は、運用面情報記憶部33に#1メモリ領域21を記憶させる。そして、ステップS33へ進む。
以上説明したように、第2の実施形態においては、制御部50−2は、運用面のプログラムコードで通信装置100−2が起動するか否かの監視を行っている。そして、運用面のプログラムコードでの通信装置100−2の起動が失敗した場合は、運用面を、それまでの退避面へ切り替えるようになっている。従って、退避面に、バージョンアップ前まで正常に動作していたプログラムコードを格納しておくことで、通信装置100−2を確実に起動させることが出来る。
以上、本発明の第2の実施形態の動作について説明した。
前述したように、本発明の第2の実施形態は、図1に示した第1の実施形態の通信装置100の不揮発性メモリ30に、運用面情報記憶部33を追加した点だけが異なるものである。従って、以下において第2の実施形態に特有の箇所に関してのみ説明するものとする。
以上説明したように、本実施形態の通信装置100−2は、外部との通信を行う通信部(通信部10)を備えている。また、プログラムコードを格納する第1および第2のメモリ領域(#1メモリ領域21、#2メモリ領域22)を有する第1の不揮発性メモリ(不揮発性メモリ20)を備えている。さらに、前記第1および第2のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する第1および第2のカウンタ(#1カウンタ31、#2カウンタ32)を有する第2の不揮発性メモリ(不揮発性メモリ30−2)を備えている。またさらに、前記第1或いは第2のメモリ領域の何れか一方のプログラムコードを展開する動作用メモリ(動作用メモリ40)と、制御部(制御部50−2)を備えている。さらにまた、第2の不揮発性メモリは、さらに、第1或いは第2のメモリ領域の何れのプログラムコードを、運用の為のプログラムコードとするかを定める運用面情報記憶部を有している。
そして、前記制御部は、前記運用面情報記憶部に記憶されているメモリ領域から運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行う。ここで、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードに対応する前記第1或いは第2の何れか一方のカウンタに格納する。そして、前記何れか一方のカウンタに格納された失敗回数が閾値を超えた場合に他方のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、よう動作する。
このことにより、運用の為のプログラムコードを、第1或いは第2のメモリ領域の何れかから選択して動作用メモリに展開することが可能となり、かつ、運用の為のプログラムコードを有するメモリ領域を変えることが可能となる。そして、バージョンアップの直前まで正常に動作していたプログラムコードを有するメモリ領域を退避面とし、運用面のメモリ領域に、バージョンアップした新たなプログラムコードを格納させることができる。つまり、運用面のメモリ領域にバージョンアップした新たなプログラムコードを格納した場合であっても、退避面のメモリ領域には、バージョンアップの直前まで正常に動作していたプログラムコードを格納することができる。
従って、本実施形態によれば、バージョンアップした新たなプログラムコードが正常に動作しない場合であっても、バージョンアップの直前まで正常に動作していたプログラムコードで通信装置を起動させることが可能となる。
[第3の実施形態]
次に、図1に示した第1の実施形態の変形例としての本発明による第3の実施形態について説明する。
図6は、本発明の通信装置の第3の実施形態を示すブロック図である。図6は、図1に示した通信装置100の制御部50に、タイマ60を追加した点でのみ、第1の実施形態と異なるものである。従って、図6において、図1の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
図6に示す通信装置100−3は、通信部10、不揮発性メモリ20、不揮発性メモリ30、動作用メモリ40、制御部50−3、タイマ60を備えている。
通信部10、不揮発性メモリ20、不揮発性メモリ30、動作用メモリ40は、第1の実施形態と同様であるため、その説明を省略する。
タイマ60は、計測スタート時からの経過時間を計測する。
制御部50−3は、通信装置100−3全体の動作制御を行い、CPUを備えている。特に、制御部50−3は、第1の実施形態の制御部50の動作に加え、通信装置100−3の電源投入時からの経過時間をタイマ60で計測する。そして、計測した経過時間が、予め指定しておいた指定値を超えたかを判定する。指定値を超えた場合、動作用メモリ40に展開するプログラムコードを運用面から退避面に切り替えるよう動作する。
次に、第3の実施形態の動作について説明する。
図7は、第3の実施形態の動作について説明するフローチャートである。
上述したように、第3の実施形態においては、制御部50−3は、通信装置100−3の電源投入時からの経過時間をタイマ60で計測する。そして、計測した経過時間が、予め指定しておいた指定値を超えたかを判定する。指定値を超えた場合、動作用メモリ40に展開するプログラムコードを運用面から退避面に切り替えるよう動作する点でのみ、第1の実施形態と異なっている。従って、図7において、第1の実施形態の動作の図2の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
図7において、通信装置100−3の電源が投入されると(図7のステップS1)、通信装置100−3の制御部50−3は以下のように動作する。
すなわち、制御部50−3は、タイマ60による計測をスタートさせる(ステップS1−2)。そして、タイマ60の値が、予め指定しておいた指定値(例えば、「60秒」であるとする)を超えたかの判定を行う(ステップS1−3)。
タイマ60の値が、予め指定しておいた指定値を超えていない場合(ステップS1−3でNo)、制御部50−3は、第1の実施形態で説明したと同様に、不揮発性メモリ30に記憶されている起動の失敗回数について、運用面からチェックを行う。つまり、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う(ステップS2)。そして、その後は、第1の実施形態と同様の動作を行う。従って、図7のステップS3からステップS9までの動作については、以下のように説明を簡略化する。
すなわち、図7のステップS3からステップS7まで動作し、動作用メモリ40への#1プログラムコードの展開が成功し(ステップS5でYes)、かつ、動作用メモリ40のプログラムコードでの起動が成功した場合(ステップS7でYes)、以下のように動作する。つまり、第1の実施形態と同様に、制御部50−3は、通信装置100−3の動作をそのまま継続させることにより、通信装置100−3に通信機能を提供させるよう動作させる(ステップS9)。
一方、ステップS3からステップS7までの動作中に、動作用メモリ40への#1プログラムコードの展開が不成功であった場合(ステップS5でNo)、或いは、動作用メモリ40のプログラムコードでの起動が不成功であった場合(ステップS7でNo)、ステップS1−3に戻る。そして、タイマ60の値が、予め指定しておいた指定値を超えたかの判定を再度行うよう動作する。
タイマ60の値が、予め指定しておいた指定値を超えている場合(ステップS1−3でYes)、制御部50−3は、第1の実施形態で説明したと同様に、不揮発性メモリ30に記憶されている起動の失敗回数について、退避面でのチェックを行う。つまり、#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う(ステップS12)。そして、その後は、第1の実施形態と同様の動作を行う。従って、図7のステップS13からステップS19までの動作については説明を省略するものとする。
なお、図7においては、不揮発性メモリ30の#1カウンタ31及び#2カウンタ32に記憶されている起動の失敗回数をチェックしながら、動作するものとして説明した。しかし、起動の失敗回数のチェックは行わないようにしてもよい。このようにすれば、通信装置100−3の電源投入時からの経過時間が、予め指定しておいた指定値を超えた場合にだけ、動作用メモリ40に展開するプログラムコードを、運用面から退避面に切り替えるようになる。
上述したように、本実施形態においては、タイマ60の値が、予め指定しておいた指定値を超えた場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるよう動作する。
従って、本実施形態によれば、タイマ60の値が、予め指定しておいた指定値を超えた場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるようになる。
以上、本発明の第3の実施形態の動作について説明した。
前述したように、本発明の第3の実施形態の通信装置100−3の制御部50−3は、通信装置100−3の電源投入時からの経過時間をタイマ60で計測する。そして、計測した経過時間が、予め指定しておいた指定値を超えたかを判定する。指定値を超えた場合、動作用メモリ40に展開するプログラムコードを運用面から退避面に切り替えるよう動作する点でのみ、第1の実施形態と異なっている。従って、以下において第3の実施形態に特有の箇所に関してのみ説明するものとする。
以上説明したように、本実施形態の通信装置100−3は、外部との通信を行う通信部(通信部10)を備えている。また、プログラムコードを格納する第1および第2のメモリ領域(#1メモリ領域21、#2メモリ領域22)を有する第1の不揮発性メモリ(不揮発性メモリ20)を備えている。さらに、前記第1および第2のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する第1および第2のカウンタ(#1カウンタ31、#2カウンタ32)を有する第2の不揮発性メモリ(不揮発性メモリ30−2)を備えている。またさらに、前記第1或いは第2のメモリ領域の何れか一方のプログラムコードを展開する動作用メモリ(動作用メモリ40)と、制御部(制御部50−3)と、タイマ(タイマ60)を備えている。
そして、前記制御部は、前記第1或いは第2のメモリ領域の何れか一方のプログラムコードを運用の為のプログラムコードとして選択すると共に、前記通信装置の電源投入時からの経過時間を前記タイマで計測する。次に、前記経過時間が予め指定しておいた指定値を超えたかを判定し、指定値を超えた場合に他方のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する。
従って、本実施形態によれば、一方のメモリ領域のプログラムコードでの起動が、指定値で示される一定時間の間不可能となった場合、他方のメモリ領域のプログラムコードで装置を起動させることが可能となる。
[第4の実施形態]
次に、図1に示した第1の実施形態の変形例としての本発明による第4の実施形態について説明する。
図8は、本発明の通信装置の第4の実施形態を示すブロック図である。図8は、図1に示した通信装置100の制御部50に、RTC(Real-Time Clock:リアルタイムクロック)70を追加している。また、不揮発性メモリ30には、バージョンアップ時刻記憶部34を追加している。そして、第4の実施形態は、前記した点でのみ、第1の実施形態と異なるものである。従って、図8において、図1の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
図8に示す通信装置100−4は、通信部10、不揮発性メモリ20、不揮発性メモリ30−4、動作用メモリ40、制御部50−4、RTC70を備えている。
通信部10、不揮発性メモリ20、動作用メモリ40は、第1の実施形態と同様であるため、その説明を省略する。
不揮発性メモリ30−4は、#1カウンタ31と#2カウンタ32に加え、バージョンアップ時刻記憶部34を格納している。
#1カウンタ31と#2カウンタ32は、第1の実施形態と同様であるため、その説明を省略する。
バージョンアップ時刻記憶部34は、#1メモリ領域21或いは#2メモリ領域22のプログラムコードを、外部のサーバなどからダウンロードしたプログラムコードでバージョンアップした時刻、を記憶する。
RTC70は、通信装置100−4の時計であり、通信装置100−4の電源が切られていても現在時刻を刻み続けるようになっている。
制御部50−4は、通信装置100−4全体の動作制御を行い、CPUを備えている。特に、制御部50−4は、第1の実施形態の制御部50の動作に加え、通信装置100−4のプログラムコードをバージョンアップした際の時刻を、バージョンアップ時刻記憶部34に記憶させる。そして、通信装置100−4の起動を、運用面のプログラムコードで行う。ここで、運用面のプログラムコードでの通信装置100−4の起動が不成功であった場合、RTC70の現在時刻を参照する。RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過している場合、制御部50−4は、退避面のプログラムコードによる通信装置100−4の起動に切り替えるよう動作する。
次に、第4の実施形態の動作について説明する。
なお、通信装置100−4の不揮発性メモリ20の運用面(#1メモリ領域21であるものとする)には、外部のサーバから、バージョンアップのためのプログラムコードがダウンロードされているものとする。そして、不揮発性メモリ30のバージョンアップ時刻記憶部34には、バージョンアップのためのプログラムコードをダウンロードした時刻が記憶されているものとする。
図9は、第4の実施形態の動作について説明するフローチャートである。
上述したように、第4の実施形態においては、制御部50−4は、通信装置100−4の起動を、運用面のプログラムコードで行う。ここで、運用面のプログラムコードでの通信装置100−4の起動が不成功であった場合、RTC70の現在時刻を参照する。RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過している場合、制御部50−4は、退避面のプログラムコードによる通信装置100−4の起動に切り替えるよう動作する点でのみ、第1の実施形態と異なっている。従って、図9において、第1の実施形態の動作の図2の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
図9において、通信装置100−4の電源が投入されると(図9のステップS1)、通信装置100−4の制御部50−4は以下のように動作する。
すなわち、制御部50−4は、RTC70の現在時刻を参照する。RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間(例えば、「24時間」であるとする)が経過しているかの判定を行う(ステップS1−5)。
予め指定した時間が経過していない場合(ステップS1−5でNo)、制御部50−4は、第1の実施形態で説明したと同様に、不揮発性メモリ30に記憶されている起動の失敗回数について、運用面からチェックを行う。つまり、#1カウンタ31に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う(ステップS2)。そして、その後は、第1の実施形態と同様の動作を行う。従って、図9のステップS3からステップS9までの動作については、以下のように説明を簡略化する。
すなわち、図9のステップS3からステップS7まで動作し、動作用メモリ40への#1プログラムコードの展開が成功し(ステップS5でYes)、かつ、動作用メモリ40のプログラムコードでの起動が成功した場合(ステップS7でYes)、以下のように動作する。つまり、第1の実施形態と同様に、制御部50−4は、通信装置100−4の動作をそのまま継続させることにより、通信装置100−4に通信機能を提供させるよう動作させる(ステップS9)。
一方、ステップS3からステップS7までの動作中に、動作用メモリ40への#1プログラムコードの展開が不成功であった場合(ステップS5でNo)、或いは、動作用メモリ40のプログラムコードでの起動が不成功であった場合(ステップS7でNo)、ステップS1−5に戻る。そして、RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過しているかの判定を再度行うよう動作する。RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過している場合(ステップS1−5でYes)、制御部50−4は、第1の実施形態で説明したと同様の動作を行う。すなわち、制御部50−4は、不揮発性メモリ30に記憶されている起動の失敗回数について、退避面でのチェックを行う。つまり、#2カウンタ32に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う(ステップS12)。そして、その後は、第1の実施形態と同様の動作を行う。従って、図9のステップS13からステップS19までの動作については説明を省略するものとする。
なお、図9においては、不揮発性メモリ30の#1カウンタ31及び#2カウンタ32に記憶されている起動の失敗回数をチェックしながら、動作するものとして説明した。しかし、起動の失敗回数のチェックは行わないようにしてもよい。このようにすれば、通信装置100−4の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過している場合にだけ、動作用メモリ40に展開するプログラムコードを、運用面から退避面に切り替えるようになる。
上述したように、本実施形態においては、RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過している場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるよう動作する。
従って、本実施形態によれば、RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過している場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるようになる。
以上、本発明の第4の実施形態の動作について説明した。
前述したように、本発明の第4の実施形態の通信装置100−4の制御部50−4は、RTC70の現在時刻が、バージョンアップ時刻記憶部34に記憶されている時刻から、予め指定した時間が経過しているかの判定を行う。予め指定した時間が経過している場合、制御部50−4は、動作用メモリ40に展開するプログラムコードを運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるよう動作する点でのみ、第1の実施形態と異なっている。従って、以下において第4の実施形態に特有の箇所に関してのみ説明するものとする。
以上説明したように、本実施形態の通信装置100−4は、外部との通信を行う通信部(通信部10)を備えている。また、プログラムコードを格納する第1および第2のメモリ領域(#1メモリ領域21、#2メモリ領域22)を有する第1の不揮発性メモリ(不揮発性メモリ20)を備えている。さらに、前記第1および第2のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する第1および第2のカウンタ(#1カウンタ31、#2カウンタ32)を有する第2の不揮発性メモリ(不揮発性メモリ30−2)を備えている。またさらに、前記第1或いは第2のメモリ領域の何れか一方のプログラムコードを展開する動作用メモリ(動作用メモリ40)と、制御部(制御部50−4)と、リアルタイムクロック(RTC70)を備えている。
そして、前記制御部は、前記第1或いは第2のメモリ領域の何れか一方のプログラムコードを運用の為のプログラムコードとして選択すると共に、前記リアルタイムクロックの現在時刻を参照する。そして、前記リアルタイムクロックの現在時刻が、バージョンアップ時刻から予め指定した時間が経過しているかを判定する。指定した時間が経過している場合、他方のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する。
従って、本実施形態によれば、一方のメモリ領域のプログラムコードでの起動が、バージョンアップ時刻から予め指定した時間不可能となった場合、他方のメモリ領域のプログラムコードで装置を起動させることが可能となる。