(57)【要約】【課題】書き換え時間の増大が抑制された不揮発性メモリ、及び、その書換方法を提供する。【解決手段】複数のセクションに分割されたプログラムが記憶された不揮発性メモリであって、複数のセクションとして、第１セクションと第２セクションを含み、第１セクションに第１関数が記憶され、第２セクションに第１関数を呼び出す第２関数が記憶されており、複数のセクションの内、第１セクションと第２セクションを除くセクションの一つの先頭アドレスから所定のアドレスまで、若しくは、第１セクションの先頭アドレスから所定のアドレスまでに、第１関数を読み出すための読み出し情報が記憶されている。【選択図】図１
2014002479.tif 000002
【特許請求の範囲】
【請求項１】
複数のセクションに分割されたプログラムが記憶された不揮発性メモリであって、
複数の前記セクションとして、第１セクションと第２セクションを含み、
前記第１セクションに第１関数が記憶され、前記第２セクションに前記第１関数を呼び出す第２関数が記憶されており、
複数の前記セクションの内、前記第１セクションと前記第２セクションを除くセクションの一つの先頭アドレスから所定のアドレスまで、若しくは、前記第１セクションの先頭アドレスから所定のアドレスまでに、前記第１関数を読み出すための読み出し情報が記憶されていることを特徴とする不揮発性メモリ。
【請求項２】
前記読み出し情報は、前記第１関数を読み出すインデックス関数、若しくは、前記第１関数のアドレスであることを特徴とする請求項１に記載の不揮発性メモリ。
【請求項３】
請求項１又は請求項２に記載の不揮発性メモリの書換方法であって、
複数の前記セクションの内、前記第１セクションと前記第２セクションを除くセクションの一つの先頭アドレスから所定のアドレスまでに、前記第１関数を読み出すための読み出し情報が記憶されており、
書換対象であるセクション、及び、前記読み出し情報を書き換えることを特徴とする書換方法。
【請求項４】
請求項１又は請求項２に記載の不揮発性メモリの書換方法であって、
複数の前記セクションの内、前記第１セクションの先頭アドレスから所定のアドレスまでに、前記第１関数を読み出すための読み出し情報が記憶されており、
書換対象であるセクションを書き換えることを特徴とする書換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のセクションから成るプログラムの記憶された不揮発性メモリ、及び、その書換方法に関するものである。
【背景技術】
【０００２】
従来、例えば特許文献１に示されるように、ファームウェアプログラムの記憶された記憶手段を有し、記憶手段に記憶されたファームウェアプログラムを、外部から受け取ったファームウェアデータに書き換えるプログラムを有する組み込み系システムにおいて、ファームウェア書き換え方法が提案されている。この方法では、書き換えに最適な位置に隙間を作り、この隙間部分で、ファームウェアプログラムの書き換えの際に生じるデータの増加分を吸収する構成となっている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−１０８３９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、ファームウェアプログラムは、複数のセクションで構成され、各セクションは、ソースプログラム又はオブジェクトプログラムによって構成されている。これらプログラムは関数を有するが、この関数が、他のプログラムの関数を呼び出す場合、以下に示す不具合が生じる。すなわち、書換対象となっているセクションのプログラムを書き換えると、そのプログラムが有する関数のアドレスが変更される。すると、その書き換えられたセクションのプログラムが有する関数を、他のセクションのプログラムの関数によって読み出すことができなくなる。そのため、結局のところ、書換対象となっているセクションだけではなく、他のセクションにあるプログラムも書き換えなくてはならず、書き換えに時間がかかる、という問題があった。
【０００５】
そこで、本発明は上記問題点に鑑み、書き換え時間の増大が抑制された不揮発性メモリ、及び、その書換方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記した目的を達成するために、本発明は、複数のセクションに分割されたプログラムが記憶された不揮発性メモリであって、複数のセクションとして、第１セクションと第２セクションを含み、第１セクションに第１関数が記憶され、第２セクションに第１関数を呼び出す第２関数が記憶されており、複数のセクションの内、第１セクションと第２セクションを除くセクションの一つの先頭アドレスから所定のアドレスまで、若しくは、第１セクションの先頭アドレスから所定のアドレスまでに、第１関数を読み出すための読み出し情報が記憶されていることを特徴とする。
【０００７】
これによれば、複数のセクションの内、第１セクションと第２セクションを除くセクションの一つの先頭アドレスから所定のアドレスまでに、第１関数を読み出すための読み出し情報が記憶されている場合、書換対象であるセクション、及び、読み出し情報を書き換えるだけで、書換が終了となる。また、複数のセクションの内、第１セクションの先頭アドレスから所定のアドレスまでに、第１関数を読み出すための読み出し情報が記憶されている場合、書換対象であるセクションを書き換えるだけで、書換が終了となる。したがって、書換対象であるセクションだけではなく、他のセクションも書き換えなくてはならない構成と比べて、書き換え時間の増大が抑制される。
【０００８】
なお、上記した読み出し情報は、第１関数を読み出すインデックス関数、若しくは、第１関数のアドレスである。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態に係る不揮発性メモリに記憶されたデータを示す概念図である。
【図２】関数の呼び出しを説明するための概念図である。
【図３】書き換え後における関数の呼び出しを説明するための概念図である。
【図４】第２実施形態に係る不揮発性メモリに記憶されたデータを示す概念図である。
【図５】関数の呼び出しを説明するための概念図である。
【図６】書き換え後における関数の呼び出しを説明するための概念図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態を図に基づいて説明する。
（第１実施形態）
図１〜図３に基づいて、本実施形態に係る不揮発性メモリ１００を説明する。図１〜図３では、埋め込みコードを斜線ハッチングで示し、図２及び図３では、関数の呼び出しを矢印で示している。そして、図３では、書き換えられた不揮発性メモリのデータ領域をドットハッチングによって示している。
【００１１】
図１に示すように、不揮発性メモリ１００には、複数のセクションに分割されたプログラムが記憶されている。このプログラムは、ｎを４以上の整数とすると、ｎ個のセクションに分割されており、第１セクションから第ｎ−１セクションに関数と埋め込みコードとが記憶され、第ｎセクションに読み出し情報と埋め込みコードとが記憶されている。本実施形態では、上記した関数として、関数Ａ１，Ｂ１が第１セクションに記憶され、関数Ａ２，Ｂ２が第２セクションに記憶されている。そして、ｋを３以上ｎより小さい整数とすると、関数Ａｋが第ｋセクションに記憶され、読み出し情報ＸＡ１，ＸＢ１，ＸＡ２，ＸＢ２…ＸＡｋ…が第ｎセクションに記憶されている。読み出し情報Ｘは、第ｎセクションの先頭アドレスから所定のアドレスまでに記憶されており、読み出し情報Ｘのアドレスが固定されている。したがって、これら読み出し情報Ｘが書き換えられたとしても、そのアドレスは不変となっている。ちなみに、各セクションに、新たな関数が記憶された場合、それに対応する読み出し情報も、第ｎアドレスに記憶される。
【００１２】
上記した関数Ａ２，Ａｋは、関数Ａ１を呼び出す（コールする）性質を有し、関数Ｂ２は、関数Ｂ１を呼び出す性質を有する。関数Ａ１，Ｂ１が、特許請求の範囲に記載の第１関数に相当し、関数Ａ２，Ｂ２，Ａｋが、特許請求の範囲に記載の第２関数に相当する。なお、他のセクションには、関数Ａ２，Ｂ２，Ａｋを読み出す性質を有する関数が記憶されているが、説明が煩雑となるので、本実施形態ではその説明を省略する。
【００１３】
読み出し情報ＸＡ１は、関数Ａ１を呼び出す（アクセスする）インデックス関数であり、読み出し情報ＸＢ１は、関数Ｂ１を呼び出すインデックス関数である。そして、読み出し情報ＸＡ２は、関数Ａ２を呼び出すインデックス関数であり、読み出し情報ＸＢ２は、関数Ｂ２を呼び出すインデックス関数であり、読み出し情報ＸＡｋは、関数Ａｋを呼び出すインデックス関数である。なお、埋め込みコードは、不揮発性メモリ１００を読み出すＣＰＵ（図示略）にエラーを通知するものである。
【００１４】
不揮発性メモリ１００に記憶されたプログラムを実行するＣＰＵ（図示略）は、例えば、関数Ａ２を実行する場合、関数Ａ２から直接的に関数Ａ１を直接読み出すのではなく、図２に示すように、先ず、第ｎセクションに記憶された読み出し情報ＸＡ１を読み出してから、関数Ａ１を読み出す。同じく、ＣＰＵは、関数Ａｋを実行する場合、第ｎセクションに記憶された読み出し情報ＸＡ１を読み出してから、関数Ａ１を読み出す。また、ＣＰＵは、図示しないが、関数Ｂ２を実行する場合、第ｎセクションに記憶された読み出し情報ＸＢ１を読み出してから、関数Ｂ１を読み出す。このように、ＣＰＵは、先ず、第ｎセクションに記憶された読み出し情報ＸＡ１，ＸＢ１を読み出してから、関数Ａ１，Ｂ１を読み出す。
【００１５】
次に、不揮発性メモリの書換方法とともに、その作用効果について説明する。上記したように、第ｎセクションの固定されたアドレスに、関数Ａ１，Ｂ１を読み出す読み出し情報ＸＡ１，ＸＢ１が記憶されている。これによれば、例えば、第１セクションを書き換える場合、図３にドットハッチングで示すように、書換対象である第１セクションと、第ｎセクションの読み出し情報ＸＡ１，ＸＢ１を書き換えるだけで、書換が終了となる。また、図示しないが、第２セクションを書き換える場合、書換対象である第２セクションと、第ｎセクションの読み出し情報ＸＡ２，ＸＢ２を書き換えるだけで、書換が終了となる。したがって、書換対象であるセクションだけではなく、他のセクションも書き換えなくてはならない構成と比べて、書き換え時間の増大が抑制される。なお、複数のアドレスに含まれるデータをブロックと示すと、ＣＰＵは、ブロック単位で処理をする。そのため、上記したように、第ｎセクションの読み出し情報ＸＡ２，ＸＢ２を書き換えるとは、読み出し情報ＸＡ２を含むブロック、及び、読み出し情報ＸＢ２を含むブロックを書き換える、という意味に相当する。
【００１６】
（第２実施形態）
次に、本発明の第２実施形態を、図４〜図６に基づいて説明する。図４〜図６では、埋め込みコードを斜線ハッチングで示し、図４及び図５では、関数の呼び出しを矢印で示している。そして、図６では、書き換えられた不揮発性メモリのデータ領域をドットハッチングによって示している。
【００１７】
第２実施形態に係る不揮発性メモリ１００は、第１実施形態によるものと共通するところが多いので、以下、共通部分については詳しい説明を省略し、異なる部分を重点的に説明する。なお、第１実施形態で示した要素と同一の要素には、同一の符号を付与している。
【００１８】
第１実施形態では、第ｎセクションに、読み出し情報Ｘ（読み出し情報ＸＡ１，ＸＢ１，ＸＡ２，ＸＢ２…ＸＡｋ…）が記憶された例を示した。これに対し、本実施形態では、各セクションに、自身が有する関数に対応する読み出し情報Ｘが分散記憶された点を特徴とする。
【００１９】
図４に示すように、第１セクションの先頭アドレスから所定のアドレスまでに、読み出し情報ＸＡ１，ＸＢ１が記憶され、その後段のアドレスに、関数Ａ１，Ｂ１が記憶されている。また、第２セクションの先頭アドレスから所定のアドレスまでに、読み出し情報ＸＡ２，ＸＢ２が記憶され、その後段のアドレスに、関数Ａ２，Ｂ２が記憶されている。また、第ｋセクションの先頭アドレスから所定のアドレスまでに、読み出し情報ＸＡｋが記憶され、その後段のアドレスに、関数Ａｋが記憶されている。第１実施形態と同様にして、読み出し情報Ｘのアドレスは固定されており、読み出し情報Ｘが書き換えられたとしても、そのアドレスは不変となっている。
【００２０】
この構成にて、関数Ａ２を実行する場合、ＣＰＵは、図５に示すように、先ず、第１セクションに記憶された読み出し情報ＸＡ１を読み出してから、関数Ａ１を読み出す。同じく、ＣＰＵは、関数Ａｋを実行する場合、第１セクションに記憶された読み出し情報ＸＡ１を読み出してから、関数Ａ１を読み出す。また、ＣＰＵは、図示しないが、関数Ｂ２を実行する場合、第１セクションに記憶された読み出し情報ＸＢ１を読み出してから、関数Ｂ１を読み出す。このように、ＣＰＵは、読み出し情報ＸＡ１，ＸＢ１を読み出してから、関数Ａ１，Ｂ１を読み出す。
【００２１】
上記したように、第１セクションの固定されたアドレスに、関数Ａ１，Ｂ１を読み出す読み出し情報ＸＡ１，ＸＢ１が記憶されている。これによれば、第１セクションを書き換える場合、図６にドットハッチングで示すように、書換対象である第１セクションを書き換えるだけで、書き換えが終了となる。また、第２セクションの固定されたアドレスに、関数Ａ２，Ｂ２を読み出す読み出し情報ＸＡ２，ＸＢ２が記憶されている。これによれば、第２セクションを書き換える場合、図示しないが、書換対象である第２セクションを書き換えるだけで、書き換えが終了となる。更に言えば、第ｋセクションの固定されたアドレスに、関数Ａｋを読み出す読み出し情報ＸＡｋが記憶されている。これによれば、第ｋセクションを書き換える場合、書換対象である第ｋセクションを書き換えるだけで、書き換えが終了となる。したがって、書換対象であるセクションだけではなく、他のセクションも書き換えなくてはならない構成と比べて、書き換え時間の増大が抑制される。
【００２２】
以上、本発明の好ましい実施形態について説明したが、本発明は上記した実施形態になんら制限されることなく、本発明の主旨を逸脱しない範囲において、種々変形して実施することが可能である。
【００２３】
各実施形態では、プログラムが、ｎを４以上の整数として、ｎ個のセクションに分割された例を示した。しかしながら、ｍを３以上の整数とすると、プログラムが、ｍ個のセクションに分割された構成を採用することもできる。
【００２４】
各実施形態では、読み出し情報ＸＡ１は、関数Ａ１を呼び出すインデックス関数であり、読み出し情報ＸＢ１は、関数Ｂ１を呼び出すインデックス関数である例を示した。しかしながら、読み出し情報ＸＡ１は、関数Ａ１のアドレスであり、読み出し情報ＸＢ１は、関数Ｂ１のアドレスである構成を採用することもできる。
【００２５】
更に言えば、各実施形態では、読み出し情報ＸＡ２は、関数Ａ２を呼び出すインデックス関数であり、読み出し情報ＸＢ２は、関数Ｂ２を呼び出すインデックス関数であり、読み出し情報ＸＡｋは、関数Ａｋを呼び出すインデックス関数である例を示した。しかしながら、読み出し情報ＸＡ２は、関数Ａ２のアドレスであり、読み出し情報ＸＢ２は、関数Ｂ２のアドレスであり、読み出し情報ＸＡｋは、関数Ａｋのアドレスである構成を採用することもできる。なお、もちろんではあるが、これら読み出し情報ＸＡ２，ＸＢ２，Ａｋが不揮発性メモリ１００に記憶されていない構成を採用することもできる。
【符号の説明】
【００２６】
１００・・・不揮発性メモリ
【図１】
2014002479.tif 000003
【図２】
2014002479.tif 000004
【図３】
2014002479.tif 000005
【図４】
2014002479.tif 000006
【図５】
2014002479.tif 000007
【図６】
2014002479.tif 000008