(57)【特許請求の範囲】
【請求項１】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するソフトウェア書き換え装置において、
前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行するプログラム呼び出し部と、
前記第１記憶装置に記憶されたプログラムの実行コードを更新するプログラム書き換え部とを備え、
前記プログラム呼び出し部は、前記プログラム書き換え部によりプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを既に実行しており、かつ、当該プログラムが優先プログラムであった場合、当該更新前の実行コードの実行と前記プログラム書き換え部による当該プログラムの実行コードの更新との両方が終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換え装置は、さらに、
前記プログラム書き換え部によりプログラムの実行コードの更新が開始されるときに、前記プログラム呼び出し部により当該プログラムの更新前の実行コードが既に実行されており、かつ、当該プログラムが非優先プログラムであった場合、前記プログラム呼び出し部による当該更新前の実行コードの実行が終了するまで、前記プログラム書き換え部による当該プログラムの実行コードの更新を禁止するプログラム管理部を備えることを特徴とするソフトウェア書き換え装置。
【請求項２】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するソフトウェア書き換え装置において、
前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行するプログラム呼び出し部と、
前記第１記憶装置に記憶されたプログラムの実行コードを更新するプログラム書き換え部とを備え、
前記プログラム呼び出し部は、前記プログラム書き換え部によりプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを未だ実行していないが既に前記第２記憶装置の記憶領域にロードしており、かつ、当該プログラムが優先プログラムであった場合、前記プログラム書き換え部による当該プログラムの実行コードの更新が終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換え装置は、さらに、
前記プログラム書き換え部によりプログラムの実行コードの更新が開始されるときに、前記プログラム呼び出し部により当該プログラムの更新前の実行コードが未だ実行されていないが既に前記第２記憶装置の記憶領域にロードされており、かつ、当該プログラムが非優先プログラムであった場合、前記プログラム呼び出し部に当該更新前の実行コードを前記第２記憶装置の記憶領域から削除させ、前記プログラム書き換え部による当該プログラムの実行コードの更新が開始してから終了するまで、前記プログラム呼び出し部による当該プログラムの実行コードのロードを禁止するプログラム管理部を備えることを特徴とするソフトウェア書き換え装置。
【請求項３】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するソフトウェア書き換え装置において、
前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行するプログラム呼び出し部と、
前記第１記憶装置に記憶されたプログラムの実行コードを更新するプログラム書き換え部とを備え、
前記プログラム呼び出し部は、前記プログラム書き換え部によりプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを未だ前記第２記憶装置の記憶領域にロードしておらず、かつ、当該プログラムが優先プログラムであった場合、前記プログラム書き換え部による当該プログラムの実行コードの更新が開始する前に、当該更新前の実行コードを前記第２記憶装置の記憶領域にロードし、前記プログラム書き換え部による当該プログラムの実行コードの更新が開始してから終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換え装置は、さらに、
前記プログラム書き換え部によりプログラムの実行コードの更新が開始されるときに、前記プログラム呼び出し部により当該プログラムの更新前の実行コードが未だ前記第２記憶装置の記憶領域にロードされておらず、かつ、当該プログラムが非優先プログラムであった場合、前記プログラム書き換え部による当該プログラムの実行コードの更新が開始してから終了するまで、前記プログラム呼び出し部による当該プログラムの実行コードのロードを禁止するプログラム管理部を備えることを特徴とするソフトウェア書き換え装置。
【請求項４】
前記ソフトウェア書き換え装置は、組み込み機器に内蔵され、さらに、
前記プログラム書き換え部によるプログラムの実行コードの更新が終了した後、前記第１記憶装置に記憶されているプログラムの実行コードと前記第２記憶装置の記憶領域にロードされている当該プログラムの実行コードとを比較し、当該比較結果に基づいて、前記組み込み機器の再起動の要否を判断する機器状態管理部を備えることを特徴とする請求項１から３までのいずれかに記載のソフトウェア書き換え装置。
【請求項５】
前記第１記憶装置は、不揮発性記憶装置であり、
前記第２記憶装置は、前記第１記憶装置より容量が小さい揮発性記憶装置であることを特徴とする請求項１から４までのいずれかに記載のソフトウェア書き換え装置。
【請求項６】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するソフトウェア書き換え装置を用いるソフトウェア書き換え方法において、
前記ソフトウェア書き換え装置のプログラム呼び出し部が、前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行する第１ステップと、
前記ソフトウェア書き換え装置のプログラム書き換え部が、前記第１記憶装置に記憶されたプログラムの実行コードを更新する第２ステップとを備え、
前記第１ステップでは、前記ソフトウェア書き換え装置のプログラム呼び出し部が、前記第２ステップでプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを既に実行しており、かつ、当該プログラムが優先プログラムであった場合、当該更新前の実行コードの実行と前記第２ステップにおける当該プログラムの実行コードの更新との両方が終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換え方法は、さらに、
前記ソフトウェア書き換え装置のプログラム管理部が、前記第２ステップでプログラムの実行コードの更新が開始されるときに、前記第１ステップで当該プログラムの更新前の実行コードが既に実行されており、かつ、当該プログラムが非優先プログラムであった場合、前記第１ステップにおける当該更新前の実行コードの実行が終了するまで、前記第２ステップにおける当該プログラムの実行コードの更新を禁止する第３ステップを備えることを特徴とするソフトウェア書き換え方法。
【請求項７】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するソフトウェア書き換え装置を用いるソフトウェア書き換え方法において、
前記ソフトウェア書き換え装置のプログラム呼び出し部が、前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行する第１ステップと、
前記ソフトウェア書き換え装置のプログラム書き換え部が、前記第１記憶装置に記憶されたプログラムの実行コードを更新する第２ステップとを備え、
前記第１ステップでは、前記ソフトウェア書き換え装置のプログラム呼び出し部が、前記第２ステップでプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを未だ実行していないが既に前記第２記憶装置の記憶領域にロードしており、かつ、当該プログラムが優先プログラムであった場合、前記第２ステップにおける当該プログラムの実行コードの更新が終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換え方法は、さらに、
前記ソフトウェア書き換え装置のプログラム管理部が、前記第２ステップでプログラムの実行コードの更新が開始されるときに、前記第１ステップで当該プログラムの更新前の実行コードが未だ実行されていないが既に前記第２記憶装置の記憶領域にロードされており、かつ、当該プログラムが非優先プログラムであった場合、前記ソフトウェア書き換え装置のプログラム呼び出し部に当該更新前の実行コードを前記第２記憶装置の記憶領域から削除させ、前記第２ステップにおける当該プログラムの実行コードの更新が開始してから終了するまで、前記第１ステップにおける当該プログラムの実行コードのロードを禁止する第３ステップを備えることを特徴とするソフトウェア書き換え方法。
【請求項８】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するソフトウェア書き換え装置を用いるソフトウェア書き換え方法において、
前記ソフトウェア書き換え装置のプログラム呼び出し部が、前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行する第１ステップと、
前記ソフトウェア書き換え装置のプログラム書き換え部が、前記第１記憶装置に記憶されたプログラムの実行コードを更新する第２ステップとを備え、
前記第１ステップでは、前記ソフトウェア書き換え装置のプログラム呼び出し部が、前記第２ステップでプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを未だ前記第２記憶装置の記憶領域にロードしておらず、かつ、当該プログラムが優先プログラムであった場合、前記第２ステップにおける当該プログラムの実行コードの更新が開始する前に、当該更新前の実行コードを前記第２記憶装置の記憶領域にロードし、前記第２ステップにおける当該プログラムの実行コードの更新が開始してから終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換え方法は、さらに、
前記ソフトウェア書き換え装置のプログラム管理部が、前記第２ステップでプログラムの実行コードの更新が開始されるときに、前記第１ステップで当該プログラムの更新前の実行コードが未だ前記第２記憶装置の記憶領域にロードされておらず、かつ、当該プログラムが非優先プログラムであった場合、前記第２ステップにおける当該プログラムの実行コードの更新が開始してから終了するまで、前記第１ステップにおける当該プログラムの実行コードのロードを禁止する第３ステップを備えることを特徴とするソフトウェア書き換え方法。
【請求項９】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するコンピュータにより実行されるソフトウェア書き換えプログラムにおいて、
前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行するプログラム呼び出し処理と、
前記第１記憶装置に記憶されたプログラムの実行コードを更新するプログラム書き換え処理とをコンピュータに実行させ、
前記プログラム呼び出し処理は、前記プログラム書き換え処理によりプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを既に実行しており、かつ、当該プログラムが優先プログラムであった場合、当該更新前の実行コードの実行と前記プログラム書き換え処理による当該プログラムの実行コードの更新との両方が終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換えプログラムは、さらに、
前記プログラム書き換え処理によりプログラムの実行コードの更新が開始されるときに、前記プログラム呼び出し処理により当該プログラムの更新前の実行コードが既に実行されており、かつ、当該プログラムが非優先プログラムであった場合、前記プログラム呼び出し処理による当該更新前の実行コードの実行が終了するまで、前記プログラム書き換え処理による当該プログラムの実行コードの更新を禁止するプログラム管理処理をコンピュータに実行させることを特徴とするソフトウェア書き換えプログラム。
【請求項１０】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するコンピュータにより実行されるソフトウェア書き換えプログラムにおいて、
前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行するプログラム呼び出し処理と、
前記第１記憶装置に記憶されたプログラムの実行コードを更新するプログラム書き換え処理とをコンピュータに実行させ、
前記プログラム呼び出し処理は、前記プログラム書き換え処理によりプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを未だ実行していないが既に前記第２記憶装置の記憶領域にロードしており、かつ、当該プログラムが優先プログラムであった場合、前記プログラム書き換え処理による当該プログラムの実行コードの更新が終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換えプログラムは、さらに、
前記プログラム書き換え処理によりプログラムの実行コードの更新が開始されるときに、前記プログラム呼び出し処理により当該プログラムの更新前の実行コードが未だ実行されていないが既に前記第２記憶装置の記憶領域にロードされており、かつ、当該プログラムが非優先プログラムであった場合、前記プログラム呼び出し処理に当該更新前の実行コードを前記第２記憶装置の記憶領域から削除させ、前記プログラム書き換え処理による当該プログラムの実行コードの更新が開始してから終了するまで、前記プログラム呼び出し処理による当該プログラムの実行コードのロードを禁止するプログラム管理処理をコンピュータに実行させることを特徴とするソフトウェア書き換えプログラム。
【請求項１１】
優先度が高く設定された優先プログラムと優先プログラム以外の非優先プログラムとに分類される複数のプログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するコンピュータにより実行されるソフトウェア書き換えプログラムにおいて、
前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行するプログラム呼び出し処理と、
前記第１記憶装置に記憶されたプログラムの実行コードを更新するプログラム書き換え処理とをコンピュータに実行させ、
前記プログラム呼び出し処理は、前記プログラム書き換え処理によりプログラムの実行コードの更新が開始されるときに、当該プログラムの更新前の実行コードを未だ前記第２記憶装置の記憶領域にロードしておらず、かつ、当該プログラムが優先プログラムであった場合、前記プログラム書き換え処理による当該プログラムの実行コードの更新が開始する前に、当該更新前の実行コードを前記第２記憶装置の記憶領域にロードし、前記プログラム書き換え処理による当該プログラムの実行コードの更新が開始してから終了するまで、当該更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておき、
前記ソフトウェア書き換えプログラムは、さらに、
前記プログラム書き換え処理によりプログラムの実行コードの更新が開始されるときに、前記プログラム呼び出し処理により当該プログラムの更新前の実行コードが未だ前記第２記憶装置の記憶領域にロードされておらず、かつ、当該プログラムが非優先プログラムであった場合、前記プログラム書き換え処理による当該プログラムの実行コードの更新が開始してから終了するまで、前記プログラム呼び出し処理による当該プログラムの実行コードのロードを禁止するプログラム管理処理をコンピュータに実行させることを特徴とするソフトウェア書き換えプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア書き換え装置及びソフトウェア書き換え方法及びソフトウェア書き換えプログラムに関するものである。
【背景技術】
【０００２】
情報処理用の記憶装置の１つとしてフラッシュメモリがあり、携帯電話などの組み込み機器に使われている。フラッシュメモリには、一般にＮＯＲ型フラッシュメモリとＮＡＮＤ型フラッシュメモリの２種類がある。ＮＯＲ型フラッシュメモリでは、ＸＩＰ（ｅＸｅｃｕｔｅ・Ｉｎ・Ｐｌａｃｅ）という技術により、フラッシュメモリ上のデータやコードにランダムにアクセスできる上、フラッシュメモリ上でコードをそのまま実行できる。一方、ＮＡＮＤ型フラッシュメモリでは、フラッシュメモリ上のコードをＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）にロードして実行しなければならない。そのため、ＲＡＭの容量がＮＡＮＤ型フラッシュメモリよりも小さいと、必要に応じてコードをＲＡＭにロードする仮想記憶（デマンドページング）の技術を使う必要がある。しかしながら、一般に同じ容量であれば、ＮＡＮＤ型フラッシュメモリの方がＮＯＲ型フラッシュメモリよりもコストが安くなる。
【０００３】
従来技術では、ソフトウェアの更新を実行する場合、フラッシュメモリを２重にもつことによって、コードの実行中であってもフラッシュメモリ上のソフトウェアを書き換えていた（例えば、特許文献１参照）。
【０００４】
フラッシュメモリが電池で動作する組み込み機器に使われている場合、コードの実行中には電池が消耗するため、コードの実行中にソフトウェアの更新を実行していると電池が切れる可能性がある。従来技術では、そのような事態が発生すると、フェールセーフ機能によって、復旧後引き続きソフトウェアの更新を実行していた（例えば、特許文献２及び３参照）。
【特許文献１】特開平７−２００３０６号公報
【特許文献２】特開２００５−７８５０２号公報
【特許文献３】特開２００５−２１５８４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ソフトウェアの更新を実行する場合、ＮＯＲ型フラッシュメモリでは、従来技術のようにフラッシュメモリを２重化していなければ、コードの実行中にフラッシュメモリ上のソフトウェアを書き換えることは困難であった。しかしながら、フラッシュメモリを２重化することは、コストに厳しい組み込み機器では適用しにくいという課題があった。
【０００６】
一方、ＮＡＮＤ型フラッシュメモリでは、コードをＲＡＭ上にコピーして実行するため、コードの実行中にフラッシュメモリ上のソフトウェアを書き換えることができる。しかしながら、ＮＡＮＤ型フラッシュメモリでは、必要に応じてコードをＲＡＭにロードするため、書き換え中のコードをＲＡＭにロードするような事態が発生すると、従来技術では対処できないという課題があった。
【０００７】
一般にＰＣ（パーソナルコンピュータ）などのソフトウェアの更新においても、多くの場合、アプリケーションを停止するようにユーザに指示したり、ファームウェアの更新方法を限定したり、あるいは、実行中のソフトウェアの更新が可能であっても、機能を制限したりする上に、ハードディスクの容量に余裕があるか、２重にメモリをもっていなければならない。
【０００８】
本発明は、例えば、メモリを２重化することなく、プログラムの実行コード又はプログラムが利用するデータを当該プログラムの実行中に書き換えられるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一の態様に係るソフトウェア書き換え装置は、
プログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置と、プログラムの実行コードを実行する処理装置とを具備するソフトウェア書き換え装置において、
前記第１記憶装置に記憶されたプログラムの実行コードを前記第２記憶装置の記憶領域にロードして前記処理装置により実行するプログラム呼び出し部と、
前記第１記憶装置に記憶されたプログラムの実行コードを更新するプログラム書き換え部とを備え、
前記プログラム呼び出し部は、前記プログラム書き換え部によるプログラムの実行コードの更新が開始してから終了するまで、当該プログラムの更新前の実行コードを前記第２記憶装置の記憶領域に常駐させておくことを特徴とする。
【発明の効果】
【００１０】
本発明の一の態様によれば、プログラムの実行コードを記憶する第１記憶装置と、プログラムの実行コードがロードされる記憶領域を有する第２記憶装置とを具備するソフトウェア書き換え装置において、プログラム呼び出し部が、プログラム書き換え部による第１記憶装置に記憶されたプログラムの実行コードの更新が開始してから終了するまで、当該プログラムの更新前の実行コードを第２記憶装置の記憶領域に常駐させておくことにより、例えば、メモリを２重化することなく、プログラムの実行コードを当該プログラムの実行中に書き換えることが可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態について、図を用いて説明する。
【００１２】
実施の形態１．
図１は、本実施の形態に係る組み込み機器１０１の構成を示すブロック図である。
【００１３】
図１において、組み込み機器１０１は、組み込み型の情報処理機器であり、ＣＰＵ１０２（中央処理装置）、ＮＡＮＤ型フラッシュメモリ１０３、ＲＡＭ１０４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、各種Ｉ／Ｏデバイス類や通信モジュール１０５を備える。
【００１４】
ＣＰＵ１０２は、プログラムの実行コードを実行する処理装置の一例である。ＣＰＵ１０２は、バス１０６を介して、ＮＡＮＤ型フラッシュメモリ１０３、ＲＡＭ１０４、各種Ｉ／Ｏデバイス類や通信モジュール１０５と接続され、これらのハードウェアデバイスを制御する。
【００１５】
ＮＡＮＤ型フラッシュメモリ１０３は、プログラムの実行コードやプログラムが利用するデータ（以下、「利用データ」という）を記憶する第１記憶装置の一例である。ＮＡＮＤ型フラッシュメモリ１０３は不揮発性記憶装置の一種であり、ＨＤＤ（ハードディスクドライブ）など、他の種類の不揮発性記憶装置に置き換えても、後述する組み込み機器１０１の動作は本実施の形態と同様である。本実施の形態では、組み込み機器１０１として、携帯電話など、小型でコストを抑えた情報処理機器を想定しているため、ＮＡＮＤ型フラッシュメモリ１０３には、ユーザが利用する領域（後述するユーザ利用領域）以外では２重にプログラムを記憶するなどの余裕はないものとする。
【００１６】
ＲＡＭ１０４は、プログラムの実行コードや利用データがロードされる記憶領域を有する第２記憶装置の一例である。ＲＡＭ１０４は、揮発性記憶装置の一種である。本実施の形態では、ＮＡＮＤ型フラッシュメモリ１０３の容量に比べて、ＲＡＭ１０４の容量が小さいものとする。
【００１７】
各種Ｉ／Ｏデバイス類や通信モジュール１０５は、例えば、ＬＣＤ（液晶ディスプレイ）などの表示デバイス、入力操作のためのキーデバイス、あるいは、無線通信のための無線通信モジュールなどである。
【００１８】
ＮＡＮＤ型フラッシュメモリ１０３、あるいは、不図示のＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）には、オペレーティングシステム（ＯＳ）が記憶されている。また、ＮＡＮＤ型フラッシュメモリ１０３には、プログラム群、データ群が記憶されている。プログラム群のプログラムは、ＣＰＵ１０２、オペレーティングシステムにより実行される。プログラム群には、本実施の形態において更新の対象となるプログラムのほか、本実施の形態の説明において「〜部」として説明する機能を実行するプログラム（後述するソフトウェア書き換えプログラム）が記憶される。各プログラムは、ＣＰＵ１０２により読み出され実行される。また、データ群には、本実施の形態において更新の対象となる利用データのほか、各プログラムの処理結果（例えば複数の実行コードやデータ同士の比較結果）などがデータとして記憶される。各データは、ＣＰＵ１０２によりＲＡＭ１０４に読み出され、抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのＣＰＵ１０２の処理（動作）に用いられる。
【００１９】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、不図示のＲＯＭに記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、素子・デバイス・基板・配線などのハードウェアとソフトウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラム（後述するソフトウェア書き換えプログラム）として、ＮＡＮＤ型フラッシュメモリ１０３、あるいは、不図示のＲＯＭなどの記録媒体に記憶される。このプログラムはＣＰＵ１０２により読み出され、ＣＰＵ１０２により実行される。即ち、このプログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００２０】
図２は、本実施の形態に係るソフトウェア書き換え機能を有するソフトウェアのメモリ上の配置を示す図である。
【００２１】
ＮＡＮＤ型フラッシュメモリ１０３は、ユーザのデータが配置されるユーザ利用領域２０１、ＤＬＬ（動的リンクライブラリ）が配置されるＤＬＬ領域２０２、プログラムの実行コードや利用データが配置される実行コード／データ領域２０３、ソフトウェア書き換えプログラム２０４が配置される領域の各領域からなる。
【００２２】
ユーザ利用領域２０１は、ユーザがメールや写真などのファイル、即ち、ユーザデータを保存するために利用する領域である。
【００２３】
ＤＬＬ領域２０２は、ＲＡＭ１０４にロードして実行するモジュールのうち、動的にリンクして動作させるモジュール、即ち、ＤＬＬを格納する領域である。
【００２４】
実行コード／データ領域２０３は、ＲＡＭ１０４にそのままロードして実行できる実行コードや、ＲＡＭ１０４にそのままロードして処理できる利用データを格納する領域である。本実施の形態では、ＲＡＭ１０４の容量がＮＡＮＤ型フラッシュメモリ１０３の容量よりも小さく、ＮＡＮＤ型フラッシュメモリ１０３からＲＡＭ１０４へ実行コードなどを全てコピーすることはできない。そのため、仮想記憶（デマンドページング）の技術が利用される。具体的には、ＮＡＮＤ型フラッシュメモリ１０３におけるデータの書き込みや読み取りの単位であるページごとに、必要に応じて実行コードや利用データがＲＡＭ１０４にロードされる。
【００２５】
本実施の形態において、実行コード／データ領域２０３には複数のプログラムの実行コードが記憶され、各プログラムは優先プログラムと非優先プログラムに分類されているものとする。優先プログラムは、優先度が高く設定されたプログラムであり、非優先プログラムは、それ以外のプログラムである。優先プログラムとしては、例えば、警察（１１０番）や消防（１１９番）への電話、即ち、緊急呼を発信するプログラムなど、緊急性、あるいは、重要性の高いプログラムが挙げられる。
【００２６】
ソフトウェア書き換えプログラム２０４は、ソフトウェア書き換え機能として、例えば、実行コード／データ領域２０３に格納されている実行コードや利用データを書き換える機能を有するソフトウェアである。ソフトウェア書き換えプログラム２０４は、同様に、ＤＬＬ領域２０２に格納されているＤＬＬを書き換える機能を有していてもよい。
【００２７】
図３は、組み込み機器１０１の内部で実現されるソフトウェア書き換え装置３００の構成を示すブロック図である。
【００２８】
ソフトウェア書き換え装置３００は、プログラム書き換え部３０１、プログラム管理部３０２、プログラム呼び出し部３０３、機器状態管理部３０４を備える。以下では、組み込み機器１０１のＣＰＵ１０２、ＮＡＮＤ型フラッシュメモリ１０３、ＲＡＭ１０４もソフトウェア書き換え装置３００の一部として考える。
【００２９】
プログラム書き換え部３０１は、ソフトウェア書き換えプログラム２０４が有するソフトウェア書き換え機能としてＲＡＭ１０４上で実行され、ＮＡＮＤ型フラッシュメモリ１０３を書き換える不揮発記憶書き換え機能を有する。例えば、プログラム書き換え部３０１は、ＮＡＮＤ型フラッシュメモリ１０３の実行コード／データ領域２０３に記憶されたプログラムの実行コードや利用データを更新する。本実施の形態では、プログラム書き換え部３０１は、ページごとに、実行コードや利用データを更新するものとする。
【００３０】
プログラム管理部３０２は、ある機能の呼び出しが要求されたときに、状態に応じて、その機能の呼び出しの可否を判断し、不可と判断した場合は、その機能を呼び出さずにエラーを返す、といった処理をする実行プログラム管理機能を有する。
【００３１】
プログラム呼び出し部３０３は、ソフトウェアの書き換え中に当該ソフトウェアの動作を保証するために、必要な実行コードなどをＲＡＭ１０４上に貼り付け、決して消さないようにするＲＡＭ貼り付け機能を有する。例えば、プログラム呼び出し部３０３は、ＮＡＮＤ型フラッシュメモリ１０３の実行コード／データ領域２０３に記憶されたプログラムの実行コードをＲＡＭ１０４の記憶領域にロードしてＣＰＵ１０２により実行する。プログラム呼び出し部３０３は、プログラム書き換え部３０１によるプログラムの実行コードの更新が開始してから終了するまで、当該プログラムの更新前の実行コードをＲＡＭ１０４の記憶領域に常駐させておき、当該プログラムの実行コードが更新中であっても、必要に応じて更新前の実行コードを実行することができる。同様に、プログラム呼び出し部３０３は、ＮＡＮＤ型フラッシュメモリ１０３の実行コード／データ領域２０３に記憶された利用データをＲＡＭ１０４の記憶領域にロードしてＣＰＵ１０２により実行するプログラムに利用させる。プログラム呼び出し部３０３は、プログラム書き換え部３０１による利用データの更新が開始してから終了するまで、当該プログラムの更新前の実行コードをＲＡＭ１０４の記憶領域に常駐させておき、当該利用データが更新中であっても、必要に応じて更新前の利用データを利用することができる。本実施の形態では、プログラム呼び出し部３０３は、ページごとに、実行コードや利用データをＲＡＭ１０４の記憶領域にロードするものとする。
【００３２】
機器状態管理部３０４は、実行コードなどの書き換え完了後に、書き換えが成功したかどうかなどの状況を判断する機器状態管理機能を有する。例えば、機器状態管理部３０４は、プログラム書き換え部３０１によるプログラムの実行コードの更新が終了した後、ＮＡＮＤ型フラッシュメモリ１０３に記憶されているプログラムの実行コードとＲＡＭ１０４の記憶領域にロードされている当該プログラムの実行コードとを比較し、当該比較結果に基づいて、組み込み機器１０１の再起動の要否を判断する。
【００３３】
以下では、組み込み機器１０１（具体的には、ソフトウェア書き換え装置３００）の動作について、フローチャートを用いて説明する。
【００３４】
図４は、ソフトウェア書き換え装置３００の動作を示すフローチャートである。
【００３５】
ステップＳ４０１でプログラムの実行コードの更新要求が発行されると（即ち、プログラム書き換え部３０１によりプログラムの実行コードの更新が開始されるときに）、ステップＳ４０２で、プログラム管理部３０２は、当該プログラムが優先プログラムであるかどうか確認する。ステップＳ４０２で優先プログラムの場合、ステップＳ４０３で、プログラム管理部３０２は、プログラム呼び出し部３０３が当該プログラムの更新前の実行コードを既に実行中かどうか確認する。ステップＳ４０３でプログラム呼び出し部３０３が当該更新前の実行コードを既に実行していた場合、ステップＳ４０４で、プログラム管理部３０２は、プログラム呼び出し部３０３による当該更新前の実行コードの実行とプログラム書き換え部３０１による当該プログラムの実行コードの更新との両方が終了するまで、当該更新前の実行コードをＲＡＭ１０４の記憶領域に常駐させておくように、プログラム呼び出し部３０３を制御する。一方、ステップＳ４０３でプログラム呼び出し部３０３が当該更新前の実行コードを実行していなかった場合、ステップＳ４０５で、プログラム管理部３０２は、プログラム呼び出し部３０３が当該更新前の実行コードを既にＲＡＭ１０４の記憶領域にロードしているかどうか確認する。ステップＳ４０５でプログラム呼び出し部３０３が当該更新前の実行コードを既にＲＡＭ１０４の記憶領域にロードしていた場合、ステップＳ４０６で、プログラム管理部３０２は、プログラム書き換え部３０１による当該プログラムの実行コードの更新が終了するまで、当該更新前の実行コードをＲＡＭ１０４の記憶領域に常駐させておくように、プログラム呼び出し部３０３を制御する。ステップＳ４０５でプログラム呼び出し部３０３が当該更新前の実行コードを未だＲＡＭ１０４の記憶領域にロードしていなかった場合、ステップＳ４０７で、プログラム管理部３０２は、プログラム書き換え部３０１による当該プログラムの実行コードの更新が開始する前に、当該更新前の実行コードをＲＡＭ１０４の記憶領域にロードしておくように、プログラム呼び出し部３０３を制御する。そして、ステップＳ４０７からステップＳ４０６に進む。
【００３６】
なお、ステップＳ４０４、Ｓ４０６、Ｓ４０７において、プログラム書き換え部３０１によるプログラムの実行コードの更新が終了する前に、ＲＡＭ１０４の記憶領域にロードされている当該更新前の実行コードの実行要求が新たに発行された場合、プログラム管理部３０２は、プログラム書き換え部３０１によるプログラムの実行コードの更新が終了しても、プログラム呼び出し部３０３による当該更新前の実行コードの実行が終了するまで、当該更新前の実行コードをＲＡＭ１０４の記憶領域に常駐させておくように、プログラム呼び出し部３０３を制御する。プログラム管理部３０２は、プログラム呼び出し部３０３による当該更新前の実行コードの実行とプログラム書き換え部３０１によるプログラムの実行コードの更新との両方が終了した時点、又は、プログラム呼び出し部３０３により当該更新前の実行コードが実行中でない状態においてプログラム書き換え部３０１によるプログラムの実行コードの更新が終了した時点で、プログラム呼び出し部３０３に当該更新前の実行コードをＲＡＭ１０４の記憶領域から削除させる。
【００３７】
ステップＳ４０２で非優先プログラムの場合、ステップＳ４０８で、プログラム管理部３０２は、プログラム呼び出し部３０３が当該プログラムの更新前の実行コードを既に実行中かどうか確認する。ステップＳ４０８でプログラム呼び出し部３０３が当該更新前の実行コードを既に実行していた場合、ステップＳ４０９で、プログラム管理部３０２は、プログラム呼び出し部３０３による当該更新前の実行コードの実行が終了するまで、プログラム書き換え部３０１による当該プログラムの実行コードの更新を禁止する。一方、ステップＳ４０８でプログラム呼び出し部３０３が当該更新前の実行コードを実行していなかった場合、ステップＳ４１０で、プログラム管理部３０２は、プログラム呼び出し部３０３が当該更新前の実行コードを既にＲＡＭ１０４の記憶領域にロードしているかどうか確認する。ステップＳ４１０でプログラム呼び出し部３０３が当該更新前の実行コードを既にＲＡＭ１０４の記憶領域にロードしていた場合、ステップＳ４１１で、プログラム管理部３０２は、プログラム呼び出し部３０３に当該更新前の実行コードをＲＡＭ１０４の記憶領域から削除させる。そして、ステップＳ４１２で、プログラム管理部３０２は、プログラム書き換え部３０１によるプログラムの実行コードの更新が開始してから終了するまで、プログラム呼び出し部３０３による当該プログラムの実行コードのロードを禁止する。ステップＳ４１０でプログラム呼び出し部３０３が当該更新前の実行コードを未だＲＡＭ１０４の記憶領域にロードしていなかった場合も、ステップＳ４１２で、プログラム管理部３０２は、プログラム書き換え部３０１によるプログラムの実行コードの更新が開始してから終了するまで、プログラム呼び出し部３０３による当該プログラムの実行コードのロードを禁止する。
【００３８】
以上、図４を用いて、ソフトウェア書き換え装置３００が実行コードを更新する際に行う処理について説明したが、実行コードの代わりに利用データを更新する際も、ソフトウェア書き換え装置３００は上記と同様の処理を行う。
【００３９】
図５は、プログラム書き換え部３０１の動作の詳細な例を示すフローチャートである。
【００４０】
まず、プログラム書き換え部３０１は、他の緊急呼などのアプリケーションが動作していないかの確認をステップＳ５０１で行う。そのようなアプリケーションが動作している場合は、プログラム管理部３０２からアプリケーションが動作していることを示すメッセージが送られてくるため、プログラム書き換え部３０１は、そのメッセージの有無で判断する。
【００４１】
中断要求がある場合には、プログラム書き換え部３０１は、ステップＳ５０７でメッセージ待ちとし、メッセージが到着した場合には、ステップＳ５０８で再開のメッセージかどうかを確認し、再開であればステップＳ５０２へ移る。再開メッセージでなければ、ステップＳ５０７でメッセージ待ちへ移る。
【００４２】
ステップＳ５０２では、プログラム書き換え部３０１は、更新データを１ページ分準備する。更新データとして、プログラム書き換え部３０１は、そのまま書き換えイメージをネットワーク経由でダウンロードしていてもよいし、外部機器からダウンロードしてもよい。携帯電話などでは旧版と新版の差分データをダウンロードすることが多いが、プログラム書き換え部３０１は、このような差分データを展開し、書き換えるべきデータを用意してもよい。ステップＳ５０３で、プログラム書き換え部３０１は、機器状態管理部３０４に対して、あるページの書き換えを開始するという情報を送る。この情報に対する応答を待って、ステップＳ５０４で、プログラム書き換え部３０１は、更新データの書き込みを行う。書き込みが完了したら、ステップＳ５０５で、プログラム書き換え部３０１は、書き込み終了情報を機器状態管理部３０４に送信し、その応答を待って、次の書き込みページがあるかないかを判断する。ステップＳ５０６で、書き込みが完了したページが最後のぺージであった場合には、処理を終了する。まだ書き込みの対象となるページがある場合には、ステップＳ５０１から処理を繰り返す。
【００４３】
図５に示したフローの中で、既に緊急的に他のアプリケーションが起動されて古い実行コードが動いているときに新しい実行コードをＲＡＭ１０４にロードすると、新旧コードが混じった状態で動作するという事態が生じ、動作が不安定になると考えられる。このような事態を防ぐために、プログラム管理部３０２の実行プログラム管理機能、プログラム呼び出し部３０３のＲＡＭ貼り付け機能がある。これらの機能による処理のフローに関しては図６、図７、図８を用いて説明する。
【００４４】
電池が抜かれたり、アプリケーションが他のアプリケーションの起動で中断しているときに、そのアプリケーションが動作することにより電池がなくなり、低電圧状態になったりした場合に、異常状態で終わることがある。このような状態を管理するために、機器状態管理部３０４の機器状態管理機能がある。この機能による処理のフローに関しては図９を用いて説明する。
【００４５】
図６は、プログラム管理部３０２の構成を示すブロック図である。
【００４６】
実行プログラム管理メイン機能６０１は、図７に示す実行プログラム管理機能の主なフローを処理するメイン機能である。リソース管理表６０２は、ＲＡＭ１０４の記憶領域などのリソースを管理するためのテーブルデータである。状態遷移表６０３は、状態ごとに、各種機能を呼び出したり、割り込みが入ったりした場合に、それを受け付けるのか、拒絶するのか、その結果どの状態に遷移するのかということを記述したテーブルデータである。現在状態管理表６０４は、現在の状態が、例えば、書き換え中の状態、待ち受け中の状態、アプリケーション実行中の状態などのいずれかを管理しているテーブルデータである。例えば、図５に示したステップＳ５０３の処理の結果としては、現在の状態が書き換え中の状態であることが現在状態管理表６０４に記録されることになる。また、図５に示したステップＳ５０５の処理の結果としては、現在の状態が書き換え完了後の状態であることが現在状態管理表６０４に記録されることになる。実行プログラム管理メイン機能６０１は、ＲＡＭ１０４上で動作し、リソース管理表６０２、現在状態管理表６０４は、ＲＡＭ１０４上で生成され、状態遷移表６０３は、ＲＡＭ１０４上に読み出されて利用されるため、これらは組み込み機器１０１の電源が切れると全て消えることとなる。ただし、状態遷移表６０３は、ＮＡＮＤ型フラッシュメモリ１０３などの不揮発性メモリに予め記憶され、そこから読み出されるものであるため、状態遷移表６０３の元のデータまで消えてしまうわけではない。
【００４７】
図７は、プログラム管理部３０２の動作の詳細な例を示すフローチャートである。
【００４８】
プログラム管理部３０２の実行プログラム管理機能は、組み込み機器１０１の電源が投入されると初期化のフェーズで立ち上がる。まず、プログラム管理部３０２は、ＲＡＭ１０４上のリソース管理表６０２をステップＳ７０１で初期化する。次にステップＳ７０２で、プログラム管理部３０２は、状態遷移表を読み込む。次にステップＳ７０３で、プログラム管理部３０２は、現在状態管理表６０４を初期化する。このとき、プログラム管理部３０２は、図５のステップＳ５０３、Ｓ５０５で送られる情報に基づいて機器状態管理部３０４がＮＡＮＤ型フラッシュメモリ１０３などの不揮発性メモリに書き込む情報（後述する）を読み込み、読み込んだ情報にてソフトウェアの書き換え中の状態であることが示されていた場合には、現在の状態を書き換え中の状態として設定する。通常は、最初は何も動作していない状態なので、現在の状態は待ち受け中の状態として設定する。
【００４９】
次に、プログラム管理部３０２は、フェールセーフ状態かどうかをステップＳ７０４で確認する。フェールセーフ状態かどうかは、ステップＳ７０３で現在の状態を書き換え中の状態として設定したかどうかによって決まる。ステップＳ７０３で現在の状態を書き換え中の状態として設定した場合には、フェールセーフ状態であるため、ステップＳ７０５で、プログラム管理部３０２は、フェールセーフ機能を呼び出し、図５に示した処理フローを再開する。ステップＳ７０３で現在の状態を待ち受け中の状態として設定した場合には、フェールセーフ状態ではないため、ステップＳ７０６で、プログラム管理部３０２は、ＵＩ（ユーザインタフェース）メニューを通常の形式で構成する。即ち、プログラム管理部３０２は、ＵＩメニューの中で呼び出してはならない機能をグレーアウトするなどの制限を設けることなく、通常の状態のＵＩメニューを生成する。
【００５０】
次に、プログラム管理部３０２は、アプリケーションの起動や外部からのトリガーなどのイベント待ちをステップＳ７０７で行う。外部からのトリガーやＵＩメニューの操作などによるイベントや要求が発生すると、ソフトウェアの書き換え機能の呼び出し要求以外の場合には、ステップＳ７０８で、プログラム管理部３０２は、要求された機能が呼び出し可能であるかどうか確認する。プログラム管理部３０２は、現在の状態に応じて、状態遷移表６０３を確認し、当該機能が起動できない場合は、ステップＳ７０９で起動を拒絶して、イベント待ちのため、再びステップＳ７０７に移る。通常起動できないようなアプリケーションはＵＩメニューからは選択できなくなっているため、外部のイベントなどの場合が該当する。ステップＳ７０８で要求された機能が起動可能だった場合、プログラム管理部３０２は、ステップＳ７１２で状態を変更して、ステップＳ７１３で当該機能を実行し、イベント待ちのため、再びステップＳ７０７に移る。
【００５１】
ステップＳ７０７でソフトウェアの書き換え機能の呼び出し要求であった場合には、ステップＳ７１０へ移り、プログラム管理部３０２は、状態遷移表６０３を確認する。書き換え機能が起動不可の場合は、ステップＳ７１１で起動を拒絶し、イベント待ちのため、再びステップＳ７０７に移る。ステップＳ７１０で書き換え機能が起動可能だった場合、プログラム管理部３０２は、ステップＳ７１４で現在の状態を変更した後、ステップＳ７１５でＵＩメニューからの呼び出しを制限する機能をグレーアウトするなどして、選択できない状態に変更した上で当該書き換え機能（図５に示した処理フロー）を実行し、イベント待ちのため、再びステップＳ７０７に移る。
【００５２】
図８は、プログラム呼び出し部３０３の動作の詳細な例を示すフローチャートである。
【００５３】
図８に示した各処理は、図５に示したステップＳ５０１の前に予め実行されていることが望ましい。
【００５４】
ステップＳ８０１で、プログラム呼び出し部３０３は、必要なメモリの確保を行う。必要なメモリ量は、必要な機能を仕様上決めた時点で決まり、パラメータとして実行コード中のデータとして保持される。このパラメータの値に基づき、プログラム呼び出し部３０３は、リソース管理表６０２で管理されているメモリリソースとして、ＲＡＭ１０４の記憶領域を確保する。ステップＳ８０２で、プログラム呼び出し部３０３は、ステップＳ８０１で確保した記憶領域に必要機能をロードする。
【００５５】
ステップＳ８０３で、プログラム呼び出し部３０３は、ＯＳの機能を利用してＲＡＭ１０４の常駐領域を宣言する。つまり、プログラム呼び出し部３０３は、デマンドページングの対象外とする記憶領域を設定する。その結果、常駐領域に実行コードをロードすることで、その実行コードが常にＲＡＭ１０４上に存在することになり、その実行コードを含んでいたソフトウェアの書き換え中でもソフトウェアが動作可能となる。
【００５６】
ステップＳ８０４で、プログラム呼び出し部３０３は、メッセージ待ちになる。ステップＳ８０５で、プログラム呼び出し部３０３は、ソフトウェアの書き換え終了のメッセージを受け取ったかどうか確認する。書き換えが終了していなければ、ステップＳ８０４で、プログラム呼び出し部３０３は、再びメッセージ待ちになる。書き換えが終了していれば、ステップＳ８０６で、プログラム呼び出し部３０３は、常駐領域としていた記憶領域を元の状態に戻して（即ち、その記憶領域にロードされているページをその記憶領域から削除することを禁止していた状態から、禁止しない状態に戻して）終了する。
【００５７】
図９は、機器状態管理部３０４の動作の詳細な例を示すフローチャートである。
【００５８】
機器状態管理部３０４の機器状態管理機能はメッセージで呼び出される。そのため、最初にステップＳ９０１で、機器状態管理部３０４は、メッセージ待ちになる。ステップＳ９０２、Ｓ９０３、Ｓ９０４、Ｓ９０５で、機器状態管理部３０４は、各メッセージを受け取る。例えば、ステップＳ９０２では、図５に示した処理フローの開始時にプログラム書き換え部３０１から送られるソフトウェア書き換え開始情報をメッセージとして受け取る。また、例えば、ステップＳ９０３では、図５に示したステップＳ５０３でプログラム書き換え部３０１から送られる書き込み開始情報をメッセージとして受け取る。また、例えば、ステップＳ９０４では、図５に示したステップＳ５０５でプログラム書き換え部３０１から送られる書き込み終了情報をメッセージとして受け取る。また、例えば、ステップＳ９０５では、図５に示した処理フローの終了時にプログラム書き換え部３０１から送られるソフトウェア書き換え終了情報をメッセージとして受け取る。
【００５９】
ステップＳ９０６、Ｓ９０７で、機器状態管理部３０４は、メッセージの内容に応じて遷移した状態を、ＮＡＮＤ型フラッシュメモリ１０３などの不揮発性メモリに書き込み、ＲＡＭ１０４上の現在状態管理表６０４も修正する。組み込み機器１０１の電源断があった場合、ここで不揮発性メモリに書き込んでおいた情報を参照することで、ソフトウェアの書き換え中に組み込み機器１０１の電源が落ちたのか、その場合はどのページを書き換え中だったのか、あるいは、書き換え前だったのか、あるいは、書き換え終了後だったのかという情報を、起動時に知ることができ、図５に示したステップＳ５０１からの処理で前回の続きを行うことが可能となる。
【００６０】
また、ソフトウェア書き換え終了後には、ステップＳ９０８で、機器状態管理部３０４は、現状ロードされているＲＡＭ１０４上のロードイメージとＮＡＮＤ型フラッシュメモリ１０３上のデータをバイナリ比較する。両者に違いがなければ、ステップＳ９０９で、機器状態管理部３０４は、組み込み機器１０１の再起動が不要であると判断する。一方、両者に違いがあれば、ステップＳ９０９で、機器状態管理部３０４は、組み込み機器１０１の再起動が必要であると判断する。そして、ステップＳ９１０で、組み込み機器１０１を再起動させる。なお、再起動が必要かどうかは、そもそも、ソフトウェアの更新データを作成した時点で静的にわかるものであるため、更新データにそのための情報を含めておけば、当該情報に基づいて機器状態管理部３０４が判断することもできる。そのような情報がない場合、機器状態管理部３０４は、ＤＬＬ部分のみの修正であれば、再起動が不要であると判断し、それ以外は再起動を要すると判断しても構わない。
【００６１】
ソフトウェア書き換え装置３００が、上記のような処理をすることによって、組み込み機器１０１において、プログラムやデータ全体の容量に対してＲＡＭ１０４の容量が小さい場合でも、必要最低限のサービスを実行可能な状態でソフトウェアの書き換えができるという効果がある。携帯電話などの場合には、１１０番や１１９番などの緊急電話が常に使えなければならないという要請があるため、このような効果を奏することは特に重要である。
【００６２】
以上、本実施の形態で説明したソフトウェア書き換え装置は、
不揮発記憶装置から実行コードをＲＡＭに読み出してから実行するタイプの不揮発記憶装置を保持し、不揮発記憶装置の容量よりＲＡＭの容量が小さく、必要に応じてコードをＲＡＭにロードして実行する方式の組み込み機器に内蔵され、
不揮発記憶装置上の実行コードを組み込み機器の動作中に書き換える不揮発記憶書き換え機能と、
実行コードの書き換え中は、一部の実行コードを実行されないように保証する実行プログラム管理機能と、
書き換え中も実行できる実行コードがＲＡＭ上に存在することを保証するＲＡＭ貼り付け機能と、
実行コードの書き換え完了後に組み込み機器の書き換え状態を管理する機器状態管理機能とを保持することを特徴とする。
【００６３】
上記不揮発記憶書き換え機能は、書き換え中に停止のメッセージを受け取ると、書き換えを一旦中断し、再開のメッセージを受け取ると再開する機能を保持することを特徴とする。
【００６４】
上記不揮発記憶書き換え機能は、書き換え中に電源断など中断のメッセージを受け取ることなく終了した場合に、次回電源オン時に再開することができるフェールセーフ機能を保持することを特徴とする。
【００６５】
上記実行プログラム管理機能は、例えば実行コードの書き換えモードと通常モードといった実行コードの書き換えに関して複数の状態を管理することを特徴とする。
【００６６】
上記ソフトウェア書き換え装置は、実行コードの書き換えモード中には、一部の機能以外操作できないようにＵＩを制限したり、他の機能からの呼び出しを制限したりすることができることを特徴とする。
【００６７】
上記ＲＡＭ貼り付け機能は、例えば１１０番発信や１１９番発信などの緊急呼など、実行コードの書き換え中も必ず動作することを保証する必要がある機能に関して実行コードの書き換えの影響を受けないように、該当する機能の情報に基づいて、プログラム起動時にＲＡＭに存在することが保証される領域に実行コードをロードすることを特徴とする。
【００６８】
上記貼り付け機能は、例えば１１０番発信や１１９番発信などの緊急呼など、実行コードの書き換え中も必ず動作することを保証する必要がある機能に関して実行コードの書き換えの影響を受けないように、該当する機能の情報に基づいて、書き換えモードへの移行時にＲＡＭに存在することが保証される領域に実行コードをロードすることを特徴とする。
【００６９】
上記機器状態管理機能は、実行コードの書き換え処理が完了した後、ＲＡＭ上の実行コードと不揮発記憶装置上の実行コードの整合が取れている場合には、再起動せずにそのまま組み込み機器を動作させることを特徴とする。
【００７０】
上記機器状態管理機能は、実行コードの書き換え処理が完了した後、ＲＡＭ上の実行コードと不揮発記憶装置上の実行コードの整合が取れていない場合には、再起動することを特徴とする。
【００７１】
上記機器状態管理機能は、ソフトウェアの書き換えのためのデータの情報に基づき、再起動が必要かどうかを判断し、再起動が必要なら再起動し、不要なら再起動しないことを特徴とする。
【００７２】
また、本実施の形態で説明したソフトウェア書き換え装置は、
不揮発記憶装置からデータをＲＡＭに読み出してから利用するタイプの不揮発記憶装置を保持し、不揮発記憶装置の容量よりＲＡＭの容量が小さく、必要に応じてデータをＲＡＭにロードして実行する方式の組み込み機器に内蔵され、
不揮発記憶装置上のデータを組み込み機器の動作中に書き換える不揮発記憶書き換え機能と、
データの書き換え中は、一部のデータを読み込まれないように保証する実行プログラム管理機能と、
書き換え中も利用できるデータがＲＡＭ上に存在することを保証するＲＡＭ貼り付け機能と、
利用データの書き換え完了後に組み込み機器の書き換え状態を管理する機器状態管理機能とを保持することを特徴とする。
【００７３】
上記不揮発記憶書き換え機能は、書き換え中に停止のメッセージを受け取ると、書き換えを一旦中断し、再開のメッセージを受け取ると再開する機能を保持することを特徴とする。
【００７４】
上記不揮発記憶書き換え機能は、書き換え中に電源断など中断のメッセージを受け取ることなく終了した場合に、次回電源オン時に再開することができるフェールセーフ機能を保持することを特徴とする。
【００７５】
上記実行プログラム管理機能は、例えば利用データの書き換えモードと通常モードといった利用データの書き換えに関して複数の状態を管理することを特徴とする。
【００７６】
上記ソフトウェア書き換え装置は、利用データの書き換えモード中には、一部の機能以外操作できないようにＵＩを制限したり、他の機能からの呼び出しを制限したりすることができることを特徴とする。
【００７７】
上記ＲＡＭ貼り付け機能は、例えば１１０番発信や１１９番発信などの緊急呼など、利用データの書き換え中も必ず動作することを保証する必要がある機能に関して利用データの書き換えの影響を受けないように、該当する機能の情報に基づいて、プログラム起動時にＲＡＭに存在することが保証される領域に利用データをロードすることを特徴とする。
【００７８】
上記貼り付け機能は、例えば１１０番発信や１１９番発信などの緊急呼など、利用データの書き換え中も必ず動作することを保証する必要がある機能に関して利用データの書き換えの影響を受けないように、該当する機能の情報に基づいて、書き換えモードへの移行時にＲＡＭに存在することが保証される領域に利用データをロードすることを特徴とする。
【００７９】
上記機器状態管理機能は、利用データの書き換え処理が完了した後、ＲＡＭ上の利用データと不揮発記憶装置上の利用データの整合が取れている場合には、再起動せずにそのまま組み込み機器を動作させることを特徴とする。
【００８０】
上記機器状態管理機能は、利用データの書き換え処理が完了した後、ＲＡＭ上の利用データと不揮発記憶装置上の利用データの整合が取れていない場合には、再起動することを特徴とする。
【００８１】
上記機器状態管理機能は、ソフトウェアの書き換えのためのデータの情報に基づき、再起動が必要かどうかを判断し、再起動が必要なら再起動し、不要なら再起動しないことを特徴とする。
【図面の簡単な説明】
【００８２】
【図１】実施の形態１に係る組み込み機器の構成を示すブロック図である。
【図２】実施の形態１に係るソフトウェア書き換えプログラムのメモリ上の配置を示す図である。
【図３】実施の形態１に係るソフトウェア書き換え装置の構成を示すブロック図である。
【図４】実施の形態１に係るソフトウェア書き換え装置の動作を示すフローチャートである。
【図５】実施の形態１に係るソフトウェア書き換え装置のプログラム書き換え部の動作を示すフローチャートである。
【図６】実施の形態１に係るソフトウェア書き換え装置のプログラム管理部の構成を示すブロック図である。
【図７】実施の形態１に係るソフトウェア書き換え装置のプログラム管理部の動作を示すフローチャートである。
【図８】実施の形態１に係るソフトウェア書き換え装置のプログラム呼び出し部の動作を示すフローチャートである。
【図９】実施の形態１に係るソフトウェア書き換え装置の機器状態管理部の動作を示すフローチャートである。
【符号の説明】
【００８３】
１０１  組み込み機器、１０２  ＣＰＵ、１０３  ＮＡＮＤ型フラッシュメモリ、１０４  ＲＡＭ、１０５  各種Ｉ／Ｏデバイス類や通信モジュール、１０６  バス、２０１  ユーザ利用領域、２０２  ＤＬＬ領域、２０３  実行コード／データ領域、２０４  ソフトウェア書き換えプログラム、３００  ソフトウェア書き換え装置、３０１  プログラム書き換え部、３０２  プログラム管理部、３０３  プログラム呼び出し部、３０４  機器状態管理部、６０１  実行プログラム管理メイン機能、６０２  リソース管理表、６０３  状態遷移表、６０４  現在状態管理表。
【図１】
0005094531.tif 000002
【図２】
0005094531.tif 000003
【図３】
0005094531.tif 000004
【図４】
0005094531.tif 000005
【図５】
0005094531.tif 000006
【図６】
0005094531.tif 000007
【図７】
0005094531.tif 000008
【図８】
0005094531.tif 000009
【図９】
0005094531.tif 000010