(57)【要約】【課題】制御プログラムの実行中でも、該制御プログラムを構成する複数のプログラムの何れかを更新可能な電子制御装置において、必要なメモリのサイズを低減する。【解決手段】フラッシュメモリ１６のブロック１〜４は、プログラムＡ〜Ｃの格納領域と、プログラムＡ〜Ｃのうちで内容が更新された新プログラムが書き込まれる書込領域との、それぞれとして用いられる。テーブルＴｂには、プログラムＡ〜Ｃの格納領域と書込領域とのそれぞれである各領域について、その領域がブロック１〜４のうちのどれであるかを示す対応情報が記録される。そして、マイコンのＣＰＵは、プログラムＡ〜Ｃの何れかを更新する場合には、テーブルＴｂに基づいて、ブロック１〜４のうち、書込領域のブロックを特定し、その特定したブロックに新プログラムを書き込む。そして更に、テーブルＴｂにおける対応情報を最新の内容に更新する。【選択図】図２
2017173977.tif 000002
【特許請求の範囲】
【請求項１】
電子制御装置（１３）であって、
制御プログラムを構成する複数のプログラム（Ａ〜Ｃ）がそれぞれ格納される複数の各格納領域と、前記複数のプログラムのうちで内容が更新された新たなプログラムが書き込まれる書込領域との、それぞれとして用いられる複数の記憶部（１〜４）を有したメモリ（１６）と、
前記各格納領域と前記書込領域とのそれぞれである各領域について、その領域が前記複数の記憶部のうちのどれであるかを示す対応情報が記録された、少なくとも１つのテーブル（Ｔｂ１，Ｔｂ２）と、
前記テーブルにおける前記対応情報に基づいて、前記複数の記憶部のうち、前記各プログラムが格納されている記憶部のそれぞれを特定し、その特定した各記憶部に格納されている前記各プログラムを実行する実行部（１５，Ｓ７１０〜Ｓ７３０）と、
前記複数のプログラムのうちの何れかである更新対象プログラムを更新する場合に、前記テーブルにおける前記対応情報に基づいて、前記複数の記憶部のうち、前記書込領域である記憶部を特定し、その特定した記憶部に、内容が更新された新たな前記更新対象プログラムを書き込む書込処理部（１５，Ｓ１１０，Ｓ１２０，Ｓ１４０，Ｓ１７０）と、
前記書込処理部が前記更新対象プログラムの書き込みを実施した場合に、前記テーブルにおける前記対応情報を最新の内容に更新する更新部（１５，Ｓ５００〜Ｓ５７０）と、を備え、
前記更新部は、前記更新対象プログラムの格納領域に関する前記対応情報である第１の対応情報を、当該更新対象プログラムの格納領域が、前記特定された記憶部であることを示す新たな第１の対応情報に更新すると共に、前記書込領域に関する前記対応情報である第２の対応情報を、当該書込領域が、前記複数の記憶部のうち、更新前の前記更新対象プログラムが格納されていた記憶部であることを示す新たな第２の対応情報に更新するように構成されている、
電子制御装置。
【請求項２】
請求項１に記載の電子制御装置であって、
前記テーブルにおける前記対応情報のそれぞれには、その対応情報が、同じ領域に関する対応情報のうちで最新であるか否かを判別可能なマークが含まれ、
前記更新部は、前記テーブルの空き領域に、前記新たな第１の対応情報と前記新たな第２の対応情報とを追加して書き込むと共に、その書き込む各対応情報に含まれる前記マークを、当該対応情報が最新であることを示すマークにすることにより、前記第１の対応情報と前記第２の対応情報との更新を行うように構成されている、
電子制御装置。
【請求項３】
請求項２に記載の電子制御装置であって、
前記少なくとも１つのテーブルとして、第１のテーブル（Ｔｂ１）と第２のテーブル（Ｔｂ２）との、２つのテーブルを備え、
前記書込処理部は、
前記２つのテーブルのうち、前記各領域についての最新の前記対応情報が記録されている方である最新テーブルを特定するテーブル特定部（Ｓ１１０）を備える共に、そのテーブル特定部により特定された最新テーブルに記録されている前記対応情報に基づいて、前記書込領域である記憶部を特定するように構成され、
前記更新部は、
前記特定された最新テーブルに、前記新たな第１の対応情報と前記新たな第２の対応情報とを追加して書き込むことが可能な空き領域があるか否かを判定する判定部（Ｓ５００）と、
前記判定部により前記空き領域があると判定された場合には、前記特定された最新テーブルの空き領域に、前記新たな第１の対応情報と前記新たな第２の対応情報とを追加して書き込むと共に、その書き込む各対応情報に含まれる前記マークを、当該対応情報が最新であることを示すマークにする第１の書込部（Ｓ５２０，Ｓ５３０）と、
前記判定部により前記空き領域がないと判定された場合には、前記特定された最新テーブルに記録されている前記対応情報に基づいて、前記各領域に関する最新の前記対応情報を作成すると共に、その最新の対応情報を、前記２つのテーブルのうち、前記特定された最新テーブルとは異なる方のテーブルであって、前記対応情報が消去されている状態のテーブルである他方テーブルに書き込む第２の書込部（Ｓ５４０〜Ｓ５７０）と、を備え、
当該電子制御装置は、前記第２の書込部が前記他方テーブルへの前記対応情報の書き込みを完了した後、前記特定された最新テーブルに記録されている前記対応情報を消去する消去部（１５，Ｓ６００）を、更に備える、
電子制御装置。
【請求項４】
請求項３に記載の電子制御装置であって、
前記第２の書込部は、
前記特定された最新テーブルに記録されている前記対応情報のうち、前記更新対象プログラム以外のプログラムの格納領域に関する最新の前記対応情報を、前記他方テーブルに書き込む第１処理（Ｓ５４０，Ｓ５５０）と、
前記他方テーブルに、前記新たな第１の対応情報と前記新たな第２の対応情報とを書き込むと共に、その書き込む各対応情報に含まれる前記マークを、当該対応情報が最新であることを示すマークにする第２処理（Ｓ５６０，Ｓ５７０）とを、行うように構成されている、
電子制御装置。
【請求項５】
請求項３又は請求項４に記載の電子制御装置であって、
前記２つのテーブルには、当該２つのテーブルのうちのどちらが前記最新テーブルであるかを判別可能な判別用情報が書き込まれる判別用領域（３１）が設けられており、
前記テーブル特定部は、前記２つのテーブルの前記判別用情報に基づいて、前記２つのテーブルのうちから前記最新テーブルを特定するように構成され、
当該電子制御装置は、前記第２の書込部が動作した場合に、前記他方テーブルの前記判別用領域に、前記判別用情報として、当該他方テーブルが前記テーブル特定部によって前記最新テーブルであると特定されるための判別用情報を書き込むテーブル切替部（１５，Ｓ５８０，Ｓ５９０）を、更に備える、
電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを更新可能な電子制御装置に関する。
【背景技術】
【０００２】
特許文献１には、同じ種類のプログラムを格納するための２つの格納領域と、それら格納領域に格納されたプログラムの更新日時及び動作状態を管理する管理テーブルを格納する管理領域とを、フラッシュメモリ上に形成すること、が記載されている。そして、特許文献１に記載の装置では、プログラム起動時には、管理テーブルを参照して、２つの格納領域のうちで更新日時が新しい方のプログラムが格納されている格納領域を特定し、その特定した格納領域内のプログラムを実行する。また、プログラムの実行中に、プログラム書き換え装置からプログラムの更新要求が行われたときには、そのプログラム書き換え装置から転送される新たなプログラムを、非動作中の他方の格納領域に書き込み、管理テーブルの更新日時を更新する。そして、次の再立ち上げ時には、更新日時の新しい、上記他方の格納領域に格納されたプログラムが実行される。
【０００３】
このような特許文献１の技術によれば、メモリ内のプログラムを、そのプログラムの実行中においても更新することができる。また、特許文献１には、プログラム毎に、格納領域を２つずつ設けることが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−６３４９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
制御対象を制御するための制御プログラムが、複数のプログラムで構成されているとする。また、制御プログラムを構成する複数の各プログラムを、部分プログラムともいう。制御プログラムを、部分プログラムの単位で更新しようとした場合、特許文献１の技術では、複数の部分プログラム毎に、メモリにおける格納領域を２つずつ設ける必要がある。このため、必要なメモリのサイズが大きくなってしまう。
【０００６】
そこで、本発明は、制御プログラムの実行中でも該制御プログラムを構成する複数のプログラムの何れかを更新可能な電子制御装置において、必要なメモリのサイズを低減すること、を目的としている。
【課題を解決するための手段】
【０００７】
本発明の電子制御装置（１３）は、メモリ（１６）と、少なくとも１つのテーブル（Ｔｂ１，Ｔｂ２）と、実行部（１５，Ｓ７１０〜Ｓ７３０）と、書込処理部（１５，Ｓ１１０，Ｓ１２０，Ｓ１４０，Ｓ１７０）と、更新部（１５，Ｓ５００〜Ｓ５７０）と、を備える。
【０００８】
メモリは、複数の記憶部（１〜４）を有する。複数の記憶部は、制御プログラムを構成する複数のプログラム（Ａ〜Ｃ）がそれぞれ格納される複数の各格納領域と、複数のプログラムのうちで内容が更新された新たなプログラムが書き込まれる書込領域との、それぞれとして用いられる。なお、制御プログラムは、制御対象を制御するためのプログラムである。
【０００９】
テーブルには、前記各格納領域と前記書込領域とのそれぞれである各領域について、その領域が前記複数の記憶部のうちのどれであるかを示す対応情報が記録される。
実行部は、テーブルにおける対応情報に基づいて、メモリにおける複数の記憶部のうち、前記各プログラムが格納されている記憶部のそれぞれを特定し、その特定した各記憶部に格納されている各プログラムを実行する。
【００１０】
書込処理部は、複数のプログラムのうちの何れかである更新対象プログラムを更新する場合に、テーブルにおける対応情報に基づいて、複数の記憶部のうち、書込領域である記憶部を特定し、その特定した記憶部に、内容が更新された新たな更新対象プログラムを書き込む。
【００１１】
更新部は、書込処理部が更新対象プログラムの書き込みを実施した場合に、テーブルにおける対応情報を最新の内容に更新する。具体的には、更新部は、更新対象プログラムの格納領域に関する対応情報である第１の対応情報を、当該更新対象プログラムの格納領域が、前記特定された記憶部であることを示す新たな第１の対応情報に更新する。更に、更新部は、書込領域に関する対応情報である第２の対応情報を、当該書込領域が、複数の記憶部のうち、更新前の更新対象プログラムが格納されていた記憶部であることを示す新たな第２の対応情報に更新する。
【００１２】
このような電子制御装置によれば、制御プログラムを構成する複数のプログラムである部分プログラムのそれぞれを実行部が実行している期間中、すなわち制御プログラムの実行中においても、その部分プログラムの何れかである更新対象プログラムを、更新することができる。
【００１３】
つまり、制御プログラムの実行中においても、メモリの複数の記憶部のうち、テーブルにより書込領域であると示される記憶部に、内容が更新された新たな更新対象プログラムを書き込むことができる。そして、更新部によりテーブルの記録内容が更新され、その更新されたテーブルを実行部が参照すれば、実行部は、更新対象プログラムについては、書込領域であった記憶部に書き込まれた新たなプログラムを実行することとなる。更に、更新されたテーブルでは、メモリの複数の記憶部のうち、更新前の更新対象プログラムが格納されていた記憶部が、書込領域として記録される。このため、更新前の更新対象プログラムが格納されていた記憶部は、次回に部分プログラムの何れかを更新する際に、新たなプログラムが書き込まれる書込領域として用いられる。
【００１４】
そして、この電子制御装置では、メモリにおける記憶部のうち、書込領域として用いられる記憶部は、複数の部分プログラムに対して１つで済む。つまり、従来技術のように、複数の部分プログラム毎に格納領域を２つずつ用意する必要がない。このため、必要なメモリのサイズを低減することができる。
【００１５】
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１６】
【図１】実施形態の電子制御装置の構成を表す構成図である。
【図２】フラッシュメモリのブロックと、テーブルと、処理の概要とを説明する説明図である。
【図３】２つのテーブルを切り換えて用いることを説明する説明図である。
【図４】書換装置とＥＣＵとの通信手順を表すラダーチャートである。
【図５】書換制御処理を表すフローチャートである。
【図６】テーブル特定処理を表すフローチャートである。
【図７】第１の特定処理を表すフローチャートである。
【図８】図７の処理の作用を例示する説明図である。
【図９】第２の特定処理を表すフローチャートである。
【図１０】テーブル更新処理を表すフローチャートである。
【図１１】空き領域特定処理を表すフローチャートである。
【図１２】制御プログラムを実行するための処理を表すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら、発明を実施するための形態を説明する。
［構成］
図１に示す本実施形態のＥＣＵ１３は、車両に搭載される電子制御装置であり、車両における制御対象（例えば、エンジン）を制御する。なお、ＥＣＵは、「Electronic Control Unit」の略である。
【００１８】
図１に示すように、ＥＣＵ１３は、当該ＥＣＵ１３の動作を司るマイクロコンピュータ（以下、マイコン）１４を備える。マイコン１４は、ＣＰＵ１５と、フラッシュメモリ１６と、ＲＡＭ１７と、を備える。フラッシュメモリ１６は、記憶内容の書き換えが可能な不揮発性のメモリである。ＣＰＵ１５は、フラッシュメモリ１６に格納されているプログラムを実行する。マイコン１４の処理動作は、ＣＰＵ１５がプログラムを実行することで実現される。ＲＡＭ１７には、ＣＰＵ１５による演算結果などが記憶される。
【００１９】
ＥＣＵ１３は、通信装置１８を更に備える。通信装置１８は、マイコン１４が車両外の書換装置２２と無線で通信するための装置である。
書換装置２２は、フラッシュメモリ１６内の制御プログラムを書き換えるための装置であり、コンピュータを主要部として構成されている。制御プログラムは、制御対象を制御するためのプログラムであり、例えばエンジンを制御するためのプログラムである。また、書換装置２２は、車両外の情報処理センタ２１に設けられている。
【００２０】
なお、他の構成例として、通信装置１８がＥＣＵ１３とは別体で設けられていて、その通信装置１８とＥＣＵ１３とが、車両における有線のネットワークで通信可能に接続される構成であっても良い。この場合、書換装置２２とマイコン１４との通信としては、書換装置２２と通信装置１８との間では無線通信が実施され、通信装置１８とマイコン１４との間では有線通信が実施されることとなる。
【００２１】
［フラッシュメモリのブロックの用途とテーブル］
マイコン１４のＣＰＵ１５が実行する制御プログラムは、複数のプログラムによって構成されている。そして、制御プログラムは、部分プログラムの単位で更新されるようになっている。部分プログラムとは、制御プログラムを構成する複数の各プログラムのことである。以下では、制御プログラムを構成する部分プログラムが、プログラムＡ、プログラムＢ、プログラムＣの、３つである場合を例に挙げて説明する。なお、部分プログラムの数は、３に限らず、２または４以上であっても良い。
【００２２】
図２の（ａ）部に示すように、フラッシュメモリ１６は、部分プログラムの数よりも１つ多い４つのブロック１〜４と、２つのブロック５，６と、を備える。
フラッシュメモリ１６において、一括消去可能な最小単位の記憶領域であるブロックを、ブロック１〜６と区別するために、単位ブロックということにすると、ブロック１〜６のそれぞれは、１つ以上の単位ブロックによって構成された記憶領域である。
【００２３】
ブロック１〜４は、制御プログラムを構成するプログラムＡ〜Ｃがそれぞれ格納される３つの各格納領域と、プログラムＡ〜Ｃのうちで内容が更新された新たなプログラムが書き込まれる書込領域との、それぞれとして用いられる。プログラムＡ〜Ｃの格納領域のそれぞれと、書込領域とを、総称して、用途別領域というか、あるいは単に、領域という。また、プログラムＡの格納領域を、プログラムＡ領域ともいい、プログラムＢの格納領域を、プログラムＢ領域ともいい、プログラムＣの格納領域を、プログラムＣ領域ともいう。
【００２４】
ブロック１〜４のうち、どのブロックがどの用途別領域として用いられるかは、任意であり可変である。このため、ブロック１〜４の容量は、プログラムＡ〜Ｃのそれぞれを格納可能なデータ量に設定されている。
【００２５】
一方、ブロック５には、第１のテーブルＴｂ１が格納され、ブロック６には、第２のテーブルＴｂ２が格納される。ブロック５，６の容量は、ブロック１〜４よりも小さい。なお、２つのテーブルＴｂ１，Ｔｂ２の構成は同じであるため、テーブルＴｂ１，Ｔｂ２を総称して、テーブルＴｂという。
【００２６】
図２の（ａ）部に示すように、テーブルＴｂは、各用途別領域について、その用途別領域がブロック１〜４のうちのどれであるかを示す対応情報が、記録される情報テーブルである。
【００２７】
テーブルＴｂは、概念的には、用途別領域の識別子である領域情報が記録される欄と、ブロックの識別子であるブロック情報が記録される欄と、情報の新旧を表すマークが記録される欄と、を備える。それら各欄に記録される３つの情報、すなわち領域情報、ブロック情報及びマークは、テーブルＴｂの各行において対応付けられており、その対応付けられた３つの情報によって１組の対応情報が構成される。テーブルＴｂの各行は、対応情報の記録領域になっている。
【００２８】
なお、図２において、テーブルＴｂにおける領域情報の欄は「領域」と記載されており、テーブルＴｂにおけるブロック情報の欄は「ブロック」と記載されており、テーブルＴｂにおけるマークの欄は「マーク」と記載されている。そして、領域情報の欄に記録される領域情報として、「Ａ」は、プログラムＡ領域を意味し、「Ｂ」は、プログラムＢ領域を意味し、「Ｃ」は、プログラムＣ領域を意味し、「書込」は、書込領域を意味している。また、ブロック情報の欄に記録されるブロック情報は、本実施形態では、ブロック１〜４の符号と同じ値の番号であり、すなわちブロックの番号である。このため、ブロック情報として、「１」はブロック１を意味し、「２」はブロック２を意味し、「３」はブロック３を意味し、「４」はブロック４を意味している。これらのことは、他の図においても同様である。
【００２９】
そして、テーブルＴｂにおいては、領域情報と該領域情報に対応するブロック情報及びマークとが、該領域情報が示す用途別領域に関する対応情報であって、その用途別領域がブロック１〜４のうちのどれであるかを示す対応情報になっている。例えば、「Ａ」の領域情報と該領域情報に対応するブロック情報及びマークとが、プログラムＡ領域に関する対応情報であって、プログラムＡ領域がブロック１〜４のうちのどれであるかを示す対応情報である。また例えば、「書込」の領域情報と該領域情報に対応するブロック情報及びマークとが、書込領域に関する対応情報であって、書込領域がブロック１〜４のうちのどれであるかを示す対応情報である。
【００３０】
マークは、それが含まれた対応情報が、同じ用途別領域に関する対応情報のうちで、最新であるか否かを判別するための情報である。本実施形態において、マークは、数値であり、値が大きいほど新しいことを意味している。また、マークの初期値は１である。
【００３１】
このため、ＣＰＵ１５は、用途別領域のそれぞれについて、その用途別領域がどのブロックであるかを、テーブルＴｂにおける対応情報に基づいて特定することができる。
例えば、プログラムＡ領域であるブロックを特定するのであれば、テーブルＴｂ１から、プログラムＡ領域に関する対応情報のうちで、マーク値が最大である対応情報を、特定すれば良い。特定された対応情報に含まれるブロック情報が、プログラムＡ領域であるブロック、すなわちプログラムＡが格納されているブロックを示すからである。なお、マーク値とは、マークの値のことである。また例えば、書込領域であるブロックを特定するのであれば、テーブルＴｂ１から、書込領域に関する対応情報のうちで、マーク値が最大である対応情報を、特定すれば良い。特定された対応情報に含まれるブロック情報が、書込領域であるブロックを示すからである。
【００３２】
よって、ＣＰＵ１５は、少なくとも起動した直後に、テーブルＴｂ１における対応情報に基づいて、ブロック１〜４のうち、プログラムＡ〜Ｃが格納されているブロックのそれぞれを特定する。そして、特定した各ブロックに格納されている各プログラムＡ〜Ｃを実行する。図２の（ａ）部に示す例では、ブロック１〜３に格納されているプログラムＡ〜Ｃが実行されることとなる。また、図２の例では、図２における曲線の矢印で示すように、プログラムＢの実行によってプログラムＡがコールされるようになっている。
【００３３】
［プログラム書き換えの概要］
マイコン１４のＣＰＵ１５は、プログラムＡ〜Ｃのうちの何れかである更新対象プログラムを更新する場合には、テーブルＴｂにおける対応情報に基づいて、ブロック１〜４のうち、書込領域であるブロックを特定する。そして、ＣＰＵ１５は、その特定したブロックに、内容が更新された新たな更新対象プログラムを書き込む。その後、ＣＰＵ１５は、テーブルＴｂにおける対応情報を最新の内容に更新する。具体的には、ＣＰＵ１５は、更新対象プログラムの格納領域に関する対応情報を、当該更新対象プログラムの格納領域が、書込領域として特定したブロックであることを示す情報に更新する。更に、ＣＰＵ１５は、書込領域に関する対応情報を、当該書込領域が、更新前の更新対象プログラムが格納されていたブロックであることを示す情報に更新する。
【００３４】
具体例を挙げて説明する。
ＥＣＵ１３の製造時においては、第１のテーブルＴｂ１と第２のテーブルＴｂ２とのうち、例えば、第２のテーブルＴｂ２は記録内容が消去されている。そして、第１のテーブルＴｂ１には、図２の（ａ）部に示すテーブルＴｂと同じ情報が記録されている。ここでは、図２に示すテーブルＴｂが、第１のテーブルＴｂ１であるとして説明する。
【００３５】
つまり、図２の（ａ）部に示すように、ＥＣＵ１３の製造時においては、プログラムＡがブロック１に格納され、プログラムＢがブロック２に格納され、プログラムＣがブロック３に格納されている。そして、テーブルＴｂ１には、各用途別領域に関する対応情報として、プログラムＡ領域がブロック１で、プログラムＢ領域がブロック２で、プログラムＣ領域がブロック３で、書込領域がブロック４である、ということを示す情報が記録されている。また、各用途別領域に関する４つの対応情報に含まれるマークは、全て初期値としての「１」になっている。
【００３６】
ここで、ＣＰＵ１５が制御プログラムを実行している最中に、プログラムＡを書き換える場合について説明する。
ＣＰＵ１５は、制御プログラムの実行中に、書換装置２２から、プログラムＡの書き換えを要求する書換要求コマンドを受信すると、テーブルＴｂ１における対応情報基づいて、ブロック１〜４のうち、書込領域であるブロックを特定する。
【００３７】
具体的には、ＣＰＵ１５は、テーブルＴｂ１から、書込領域に関する対応情報のうちで、マーク値が最大である（すなわち最新の）対応情報を特定する処理を行う。そして、この処理で特定した対応情報、すなわち書込領域に関する最新の対応情報に含まれるブロック情報により、書込領域であるブロックを特定する。図２の（ａ）部に示す例では、ブロック４が、書込領域として特定される。
【００３８】
なお、ＣＰＵ１５は、書込領域に関する最新の対応情報に含まれるブロック情報の値Ｂ１とマークの値Ｍ１とを記憶する。この例では、「Ｂ１＝４、Ｍ１＝１」である。Ｂ１は、書込領域であるブロックの番号を示す。また、ＣＰＵ１５は、テーブルＴｂ１から、更新対象プログラムであるプログラムＡの格納領域に関する対応情報のうちで、マーク値が最大である（すなわち最新の）対応情報を特定する処理も行う。そして、ＣＰＵ１５は、この処理で特定した対応情報、すなわちプログラムＡ領域に関する最新の対応情報に含まれるブロック情報の値Ｂ２とマークの値Ｍ２とを記憶する。この例では、「Ｂ２＝１、Ｍ２＝１」である。Ｂ２は、プログラムＡ領域であるブロックの番号を示す。
【００３９】
そして、ＣＰＵ１５は、図２の（ｂ）部に示すように、書込領域であると特定したブロック４のデータを消去する。なお、図２の（ｂ）部における「ブランク」とは、データが消去された状態（すなわち未書き込み）を意味している。
【００４０】
そして更に、ＣＰＵ１５は、図２の（ｃ）部に示すように、書換装置２２から送信されてくる新プログラムＡを、データ消去後のブロック４に書き込む。新プログラムＡとは、内容が更新された新たなプログラムＡである。
【００４１】
ＣＰＵ１５は、新プログラムＡの書き込みを完了すると、図２の（ｃ）部に示すように、テーブルＴｂ１に新たな２つの対応情報を追加して書き込むことにより、テーブルＴｂにおける対応情報を最新の内容に更新する。
【００４２】
具体的には、ＣＰＵ１５は、図２の（ｃ）部における点線の矢印で示すように、テーブルＴｂ１の空き領域に、更新したプログラムＡの格納領域に関する対応情報、すなわち領域情報が「Ａ」である新たな対応情報として、ブロック情報が「４」でマークが「２」である対応情報を書き込む。ここで書き込む情報のうち、「４」というブロック情報は、書込領域であったブロックの番号Ｂ１であり、「２」というマークは、プログラムＡ領域に関する最新の対応情報のマーク値Ｍ２に、１を加算した値である。このような対応情報がテーブルＴｂ１に追加して書き込まれることにより、プログラムＡ領域に関する対応情報は、プログラムＡ領域が、プログラムＡの更新前に書込領域であったブロック４であることを示す情報に更新されることとなる。
【００４３】
そして更に、ＣＰＵ１５は、図２の（ｃ）部における一点鎖線の矢印で示すように、テーブルＴｂ１の空き領域に、書込領域に関する対応情報、すなわち領域情報が「書込」である新たな対応情報として、ブロック情報が「１」でマークが「２」である対応情報を書き込む。ここで書き込む情報のうち、「１」というブロック情報は、プログラムＡ領域であったブロックの番号Ｂ２であり、「２」というマークは、書込領域に関する最新の対応情報のマーク値Ｍ１に、１を加算した値である。このような対応情報がテーブルＴｂ１に追加して書き込まれることにより、書込領域に関する対応情報は、書込領域が、更新前のプログラムＡが格納されていたブロック１であることを示す情報に更新されることとなる。
【００４４】
なお、テーブルＴｂ１に新しい対応情報を書き込むと、同じ領域に関する対応情報が複数存在することとなるため、書き込む対応情報のマークを、既に書き込まれている同一領域に関する対応情報のマークよりも大きい値にしている。よって、書き込む対応情報のマークは、その対応情報が同一領域に関する対応情報のうちで最新であることを示すマークとなる。このことにより、同じ領域に関する対応情報のうちで最新の対応情報が正しく判別できるようにしている。本実施形態では、マーク値に１を加算していくようにしているが、加算する値は１以外でも良い。
【００４５】
そして、ＣＰＵ１５は、新プログラムＡの書き込み及びテーブルＴｂ１の記録内容の更新を完了した直後、あるいは、次回の起動時において、内容更新後のテーブルＴｂ１を参照することにより、プログラムＡ〜Ｃが格納されている各ブロックを特定する。その結果、図２の（ｃ）部に示す例では、制御プログラムとして、ブロック４，２，３に格納されているプログラムＡ〜Ｃが実行される。この例では、プログラムＢの実行により、ブロック４に格納されている新たなプログラムＡがコールされることとなる。
【００４６】
また、更新前のプログラムＡが格納されていたブロック１は、プログラムＡ〜Ｃの何れかを次回に書き換える場合に、新たなプログラムの書き込み先となる。なお、ブロック１は、例えばテーブルＴｂ１を更新した直後など、次回のプログラム書き換え時よりも前に、データを消去しておいても良い。
【００４７】
［使用するテーブルの切り換え］
テーブルＴｂが１つしかないと仮定すると、ＣＰＵ１５は、テーブルＴｂの記録内容を更新する場合に、テーブルＴｂに２つの空き領域がなければ、テーブルＴｂの記録内容を一旦消去し、その消去したテーブルＴｂに各用途別領域についての最新の対応情報を書き込めば良い。なお、２つの空き領域とは、新たな２つの対応情報を追加して書き込むことが可能な空き領域である。
【００４８】
ただし、ＣＰＵ１５がテーブルＴｂの記録内容を消去してから対応情報の書き込みを完了するまでの間に、電源遮断が起こると、テーブルＴｂに書き込むべき情報が失われてしまう。その結果、フラッシュメモリ１６におけるプログラムＡ〜Ｃの格納先が不明になってしまう。
【００４９】
このため、本実施形態において、ＣＰＵ１５は、第１のテーブルＴｂ１と第２のテーブルＴｂ２とを、切り換えて使用するようになっている。
まず、テーブルＴｂ１，Ｔｂ２のそれぞれには、図３に示すように、判別用領域３１が設けられている。判別用領域３１は、２つのテーブルＴｂ１，Ｔｂ２のうちのどちらが最新テーブルであるかを判別可能なマークが、書き込まれる領域である。なお、最新テーブルとは、各用途別領域についての最新の対応情報が記録されている方のテーブルであり、使用中のテーブルでもある。また、テーブルＴｂ１，Ｔｂ２の判別用領域３１に書き込まれるマークのことを、テーブル用マークという。テーブル用マークは、前述した対応情報のマークと同様に、数値であり、値が大きいほど新しいことを意味する。また、テーブル用マークの初期値も１である。
【００５０】
ここで、２つのテーブルＴｂ１，Ｔｂ２のうち、最初に使用されるのがテーブルＴｂ１であるとすると、ＥＣＵ１３の製造時においては、図３の（ａ）部に示すように、テーブルＴｂ１の判別用領域３１にはテーブル用マークとして「１」が書き込まれる。そして、テーブルＴｂ２のテーブル用マークは、未書き込み（すなわちブランク）とされる。
【００５１】
ＣＰＵ１５は、各テーブルＴｂ１，Ｔｂ２のテーブル用マークに基づいて、最新テーブルを特定する。具体的には、ＣＰＵ１５は、２つのテーブルＴｂ１，Ｔｂ２のうち、一方のテーブルのテーブル用マークが未書き込みであれば、他方のテーブルを最新テーブルとして特定する。また、ＣＰＵ１５は、２つのテーブルＴｂ１，Ｔｂ２にテーブル用マークが書き込まれていれば、テーブル用マーク値が大きい方のテーブルを、最新テーブルとして特定する。テーブル用マーク値とは、テーブル用マークの値である。
【００５２】
そして、ＣＰＵ１５は、テーブルＴｂ１，Ｔｂ２のうち、特定した最新テーブルを用いて、プログラムＡ〜Ｃが格納されているフラッシュメモリ１６の各ブロックを特定することにより、プログラムＡ〜Ｃを実行する。
【００５３】
更に、ＣＰＵ１５は、フラッシュメモリ１６に格納されているプログラムＡ〜Ｃの何れかを更新する（すなわち書き換える）場合にも、特定した最新テーブルを用いて、ブロック１〜４のうち、書込領域であるブロックを特定する。
【００５４】
そして、ＣＰＵ１５は、書込領域であるブロックに書換装置２２からの新プログラムを書き込んだ後、最新テーブルを対象にして、対応情報を更新するための処理を実施する。
この場合に、ＣＰＵ１５は、最新テーブルに２つの空き領域がないと判定すると、最新テーブルに記録されている対応情報に基づいて、各用途別領域に関する最新の対応情報を作成する。そして、各用途別領域に関する最新の対応情報を、２つのテーブルＴｂ１，Ｔｂ２のうち、最新テーブルとは異なる方のテーブルであって、対応情報が消去されている状態のテーブル（以下、他方テーブル）に書き込む。更に、ＣＰＵ１５は、他方テーブルには、テーブル用マークとして、最新テーブルのテーブル用マーク値に１を加算した値を書き込む。このため、他方テーブルは、以後は、ＣＰＵ１５により最新テーブルであると特定されることとなる。つまり、他方テーブルが、新たな最新テーブルとなる。なお、テーブルＴｂ１，Ｔｂ２のうち、他方テーブルとは異なる方であって、他方テーブルが最新テーブルとなる前に、最新テーブルであった方を、旧最新テーブルという。
【００５５】
そして、ＣＰＵ１５は、他方テーブルへの書き込みを完了した後、旧最新テーブルに記録されている対応情報を消去する。なお、本実施形態において、テーブルＴｂ１，Ｔｂ２は、フラッシュメモリ１６のブロック５，６に格納されるため、テーブルＴｂ１，Ｔｂ２の記録内容の消去は、ブロック５，６の単位で実施される。よって、旧最新テーブルに記録されている対応情報を消去すると、旧最新テーブルのテーブル用マークも消去されることとなる。
【００５６】
例えば、テーブルＴｂ１が最新テーブルであり、そのテーブルＴｂ１に図３の（ａ）部に示すような対応情報が書き込まれていている状態で、プログラムＣの書き換えが実施されたとする。
【００５７】
この場合、テーブルＴｂ１には、２つの空き領域がないため、図３の（ｂ）部に示すように、他方テーブルとしてのテーブルＴｂ２に、各用途別領域に関する最新の対応情報が書き込まれる。
【００５８】
具体的には、更新対象プログラムではないプログラムＡ，Ｂの格納領域に関する対応情報のそれぞれについては、同じ領域に関する対応情報のうちで最新の対応情報が、テーブルＴｂ１からテーブルＴｂ２にコピーされる。この例では、プログラムＡの格納領域に関する対応情報として、ブロック情報が「１」でマークが「１」である対応情報が、テーブルＴｂ１からテーブルＴｂ２にコピーされる。また、プログラムＢの格納領域に関する対応情報として、ブロック情報が「２」でマークが「１」である対応情報が、テーブルＴｂ１からテーブルＴｂ２にコピーされる。
【００５９】
そして、テーブルＴｂ２には、更新したプログラムＣの格納領域に関する対応情報として、ブロック情報が「３」でマークが「ｎ＋１」である対応情報が書き込まれる。ここで書き込まれる情報のうち、「３」というブロック情報は、テーブルＴｂ１に書き込まれている対応情報のうち、書込領域に関する最新の対応情報に含まれるブロック情報の値である。また、「ｎ＋１」というマークは、テーブルＴｂ１に書き込まれている対応情報のうち、プログラムＣ領域に関する最新の対応情報に含まれるマークの値ｎに、１を加算した値である。
【００６０】
更に、テーブルＴｂ２には、書込領域に関する対応情報として、ブロック情報が「４」でマークが「ｍ＋１」である対応情報が書き込まれる。ここで書き込まれる情報のうち、「４」というブロック情報は、テーブルＴｂ１に書き込まれている対応情報のうち、プログラムＣ領域に関する最新の対応情報に含まれるブロック情報の値である。また、「ｍ＋１」というマークは、テーブルＴｂ１に書き込まれている対応情報のうち、書込領域に関する最新の対応情報に含まれるマークの値ｍに、１を加算した値である。
【００６１】
そして更に、テーブルＴｂ２の判別用領域３１には、テーブル用マークとして、テーブルＴｂ１のテーブル用マーク値に１を加算した「２」が書き込まれる。
そして、図３の（ｃ）部に示すように、テーブルＴｂ１の記憶内容が消去される。
【００６２】
よって、その後、ＣＰＵ１５は、テーブルＴｂ２を最新テーブルとして使用することとなる。また、テーブルＴｂ２に空き領域がなくなった場合には、上記と同じ原理で、テーブルＴｂ１が使用されるようになる。
【００６３】
なお、テーブルＴｂ１，Ｔｂ２のうち、最新テーブルでない方では、テーブル用マークが消去されることから、ＣＰＵ１５は、テーブルＴｂ１，Ｔｂ２のうち、テーブル用マークが書き込まれている方を、最新テーブルであると特定するようになっていても良い。
【００６４】
一方、ＣＰＵ１５の動作は、ＣＰＵ１５が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。本実施形態では、フラッシュメモリ１６が、プログラムを格納した非遷移的実体的記録媒体に該当する。ＣＰＵ１５が行う処理のうち、制御プログラムの実行による処理以外は、フラッシュメモリ１６の記憶領域のうち、データの書き換えが禁止されている記憶領域に格納されているプログラムによって実現される。また、このプログラムの実行により、プログラムに対応する方法が実行される。
【００６５】
［書換装置とＥＣＵとの通信］
図４に示すように、書換装置２２は、ＥＣＵ１３におけるプログラムＡ〜Ｃの何れかを書き換える場合に、ＥＣＵ１３へ書換要求コマンドを送信する。書換要求コマンドには、書き換えたいプログラム（すなわち更新対象プログラム）を識別可能なプログラム情報が含まれている。
【００６６】
書換装置２２が書換要求コマンドを送信すると、ＥＣＵ１３では、ＣＰＵ１５が後述する図５の書換制御処理のうち、Ｓ１００〜Ｓ１４０の処理を実行する。そして、ＣＰＵ１５は、Ｓ１００〜Ｓ１４０の処理が正常に完了したか否かを示す結果応答を、書換装置２２に送信する。
【００６７】
書換装置２２は、ＥＣＵ１３からの結果応答が「正常」を示す応答であれば、内容が更新された更新対象プログラム（すなわち新プログラム）を、ＥＣＵ１３へ送信する。また、書換装置２２は、ＥＣＵ１３からの結果応答が「異常」を示す応答であれば、新プログラムの送信を止めて、オペレータに異常終了を通知する処理などを行う。
【００６８】
書換装置２２から新プログラムが送信されると、ＥＣＵ１３では、ＣＰＵ１５が後述する図５の書換制御処理のうち、Ｓ１６０〜Ｓ１８０の処理を実行する。そして、ＣＰＵ１５は、Ｓ１６０〜Ｓ１８０の処理が正常に完了したか否かを示す結果応答を、書換装置２２に送信する。
【００６９】
すると、書換装置２２は、ＥＣＵ１３からの結果応答の内容を、オペレータに通知する処理などを行う。
［ＣＰＵが行う書換制御処理］
ＥＣＵ１３では、書換装置２２から書換要求コマンドが送信されてくると、ＣＰＵ１５が、図５に示す書換制御処理を実行する。
【００７０】
図５に示すように、ＣＰＵ１５は、まずＳ１００にて、書換要求コマンドを受信し、その書換要求コマンドに含まれているプログラム情報により、更新対象プログラムがプログラムＡ〜Ｃのうちのどれであるかを判別する。
【００７１】
ＣＰＵ１５は、次のＳ１１０にて、図６に示すテーブル特定処理を行う。テーブル特定処理は、テーブルＴｂ１，Ｔｂ２のうちの最新テーブルを特定する処理である。なお、以下では、テーブルＴｂ１，Ｔｂ２のうち、テーブル特定処理によって最新テーブルであると特定された方を、特定された最新テーブルという。
【００７２】
ＣＰＵ１５は、次のＳ１２０にて、図７に示す第１の特定処理を行う。第１の特定処理は、特定された最新テーブルから、書込領域に関する最新の対応情報を特定する処理であり、書込領域であるブロックを特定する処理でもある。
【００７３】
ＣＰＵ１５は、次のＳ１３０にて、図９に示す第２の特定処理を行う。第２の特定処理は、特定された最新テーブルから、更新対象プログラムの格納領域に関する最新の対応情報を特定する処理であり、更新前の更新対象プログラムが格納されているブロックを特定する処理でもある。
【００７４】
ＣＰＵ１５は、次のＳ１４０にて、ブロック１〜４のうち、Ｓ１２０で書込領域であると特定したブロックのデータを消去する。
ＣＰＵ１５は、次のＳ１５０にて、Ｓ１００〜Ｓ１４０の処理が正常に完了したか否かを示す結果応答を、書換装置２２に送信する。
【００７５】
ＣＰＵ１５は、次のＳ１６０にて、書換装置２２から送信されてくる新プログラムを受信する。この新プログラムは、プログラムＡ〜Ｃのうち、内容が更新された新たな更新対象プログラムである。
【００７６】
ＣＰＵ１５は、次のＳ１７０にて、受信した新プログラムを、Ｓ１４０でデータ消去を行ったブロック（すなわち書込領域であるブロック）に書き込む。
ＣＰＵ１５は、次のＳ１８０にて、図１０に示すテーブル更新処理を行う。テーブル更新処理は、テーブルＴｂの記録内容を更新する処理である。
【００７７】
ＣＰＵ１５は、次のＳ１９０にて、Ｓ１６０〜Ｓ１８０の処理が正常に完了したか否かを示す結果応答を、書換装置２２に送信し、その後、当該書換制御処理を終了する。
〈テーブル特定処理〉
図６に示すように、ＣＰＵ１５は、図５のＳ１１０におけるテーブル特定処理では、まずＳ２１０にて、第１のテーブルＴｂ１のテーブル用マーク値を読み出し、その読み出したテーブル用マーク値を「ＴＭ１」として記憶する。
【００７８】
ＣＰＵ１５は、次のＳ２２０にて、第２のテーブルＴｂ２のテーブル用マーク値を読み出し、その読み出したテーブル用マーク値を「ＴＭ２」として記憶する。
ＣＰＵ１５は、次のＳ２３０にて、「ＴＭ２」が未書き込みのデータ値であるか否か、すなわち、第２のテーブルＴｂ２のテーブル用マークが未書き込みであるか否かを判定する。そして、ＣＰＵ１５は、第２のテーブルＴｂ２のテーブル用マークが未書き込みであると判定した場合には、Ｓ２４０にて、第１のテーブルＴｂ１が最新テーブルであると特定し、その後、当該テーブル特定処理を終了する。
【００７９】
また、ＣＰＵ１５は、Ｓ２３０にて、第２のテーブルＴｂ２のテーブル用マークが未書き込みではないと判定した場合には、Ｓ２５０に進む。
ＣＰＵ１５は、Ｓ２５０では、「ＴＭ１」が未書き込みのデータ値であるか否か、すなわち、第１のテーブルＴｂ１のテーブル用マークが未書き込みであるか否かを判定する。そして、ＣＰＵ１５は、第１のテーブルＴｂ１のテーブル用マークが未書き込みであると判定した場合には、Ｓ２６０にて、第２のテーブルＴｂ２が最新テーブルであると特定し、その後、当該テーブル特定処理を終了する。
【００８０】
また、ＣＰＵ１５は、Ｓ２５０にて、第１のテーブルＴｂ１のテーブル用マークが未書き込みではないと判定した場合には、Ｓ２７０に進む。
ＣＰＵ１５は、Ｓ２７０では、「ＴＭ１＞ＴＭ２」であるか否かを判定し、「ＴＭ１＞ＴＭ２」であると判定した場合には、Ｓ２８０にて、第１のテーブルＴｂ１が最新テーブルであると特定し、その後、当該テーブル特定処理を終了する。
【００８１】
また、ＣＰＵ１５は、Ｓ２７０にて、「ＴＭ１＞ＴＭ２」ではないと判定した場合には、Ｓ２９０にて、第２のテーブルＴｂ２が最新テーブルであると特定し、その後、当該テーブル特定処理を終了する。
【００８２】
つまり、テーブル特定処理では、２つのテーブルＴｂ１，Ｔｂ２のうち、一方のテーブルのテーブル用マークが未書き込みであれば、他方のテーブルを最新テーブルとして特定するようになっている。また、２つのテーブルＴｂ１，Ｔｂ２にテーブル用マークが書き込まれていれば、テーブル用マーク値が大きい方のテーブルを、最新テーブルとして特定するようになっている。
【００８３】
なお、前述したように、テーブルＴｂ１，Ｔｂ２のうち、最新テーブルでない方についてはテーブル用マークが消去されるのであれば、テーブル特定処理では、テーブルＴｂ１，Ｔｂ２のうち、テーブル用マークが書き込まれている方を、最新テーブルであると特定するようになっていても良い。その場合、図６におけるＳ２５０，Ｓ２７０〜Ｓ２９０を削除することができる。
【００８４】
〈第１の特定処理〉
図７に示すように、ＣＰＵ１５は、図５のＳ１２０における第１の特定処理では、まずＳ３１０にて、インデックスＩを初期値の「１」にする。インデックスＩは、テーブルＴｂに記録されている対応情報のうち、何番目の対応情報を読み出すかを示す変数である。
【００８５】
そして、ＣＰＵ１５は、次のＳ３２０にて、暫定最新マーク値ＺＭと、暫定最新ブロック値ＺＢとを、初期値の「０」にする。暫定最新マーク値ＺＭは、探索対象の対応情報に含まれるマークの暫定最新値であり、暫定最新ブロック値ＺＢは、探索対象の対応情報に含まれるブロック情報の暫定最新値である。なお、ブロック値とは、ブロック情報の値のことである。また、第１の特定処理において、探索対象の対応情報は、書込領域に関する対応情報である。
【００８６】
ＣＰＵ１５は、次のＳ３３０では、特定された最新テーブルから、インデックスＩによって示されるＩ番目の対応情報を読み出す。
ＣＰＵ１５は、次のＳ３４０にて、Ｓ３３０で読み出した対応情報がブランクデータ（すなわち未書き込みのデータ）であるか否を判定し、読み出した対応情報がブランクデータでなければ、Ｓ３５０に進む。
【００８７】
ＣＰＵ１５は、Ｓ３５０では、Ｓ３３０で読み出した対応情報について、その対応情報に含まれる領域情報が「書込」であり、且つ、その対応情報に含まれるマークの値が暫定最新マーク値ＺＭよりも大きい、か否かを判定する。そして、ＣＰＵ１５は、Ｓ３５０で肯定判定した場合には、Ｓ３６０に進む。なお、第１の特定処理では、書込領域に関する対応情報を探索対象としているため、Ｓ３５０では、領域情報が、書込領域を示す領域情報（すなわち「書込」）であるか否かを判定することにより、Ｓ３３０で読み出した対応情報が探索対象の対応情報であるか否かを判定している。
【００８８】
ＣＰＵ１５は、Ｓ３６０では、Ｓ３３０で読み出した対応情報に含まれるマークの値を、暫定最新マーク値ＺＭとして記憶すると共に、Ｓ３３０で読み出した対応情報に含まれるブロック情報の値を、暫定最新ブロック値ＺＢとして記憶する。
【００８９】
そして、ＣＰＵ１５は、Ｓ３６０の処理を行った後、Ｓ３７０に進む。また、ＣＰＵ１５は、Ｓ３５０で否定判定した場合には、そのままＳ３７０に進む。
ＣＰＵ１５は、Ｓ３７０では、インデックスＩが、最新テーブルの終端を示す値であるか否かを判定し、インデックスＩが終端を示す値でなければ、Ｓ３８０に進む。ＣＰＵ１５は、Ｓ３８０では、インデックスＩをインクリメントし、その後、Ｓ３３０に戻って、Ｓ３３０以降の処理を行う。
【００９０】
また、ＣＰＵ１５は、Ｓ３７０にて、インデックスＩが終端を示す値であると判定した場合には、Ｓ３９０に進む。また、ＣＰＵ１５は、Ｓ３４０にて、Ｓ３３０で読み出した対応情報がブランクデータであると判定した場合にも、Ｓ３９０に進む。
【００９１】
ＣＰＵ１５は、Ｓ３９０では、ブロック１〜４のうち、暫定最新ブロック値ＺＢが示すブロックが、書込領域であると特定する。そして、ＣＰＵ１５は、次のＳ３９５にて、暫定最新ブロック値ＺＢを「Ｂｒ」として記憶すると共に、暫定最新マーク値ＺＭを「Ｍｒ」として記憶し、その後、当該第１の特定処理を終了する。
【００９２】
このような第１の特定処理では、Ｓ３３０にて最新テーブルから１つずつ読み出される対応情報のうち、Ｓ３５０で最後に肯定判定された対応情報が、探索対象のうちで最新の対応情報、すなわち書込領域に関する最新の対応情報として特定される。そして、その特定された対応情報に含まれるブロック情報とマークとの各値が、暫定最新ブロック値ＺＢと暫定最新マーク値ＺＭとの、それぞれの最終値となり、その各値が「Ｂｒ」，「Ｍｒ」として記憶される。
【００９３】
つまり、第１の特定処理が終了した時点において、暫定最新ブロック値ＺＢは、書込領域であるブロックの番号を示し、そのブロックの番号が「Ｂｒ」として記憶される。また、第１の特定処理が終了した時点において、暫定最新マーク値ＺＭは、書込領域に関する最新の対応情報のマーク値を示し、そのマーク値が「Ｍｒ」として記憶される。なお、「Ｂｒ」は、前述した具体例での「Ｂ１」に相当し、「Ｍｒ」は、前述した具体例での「Ｍ１」に相当する。
【００９４】
例えば、図８に示すテーブルＴｂ１が最新テーブルであったとする。この場合、第１の特定処理が実行されることで、暫定最新ブロック値ＺＢと暫定最新マーク値ＺＭとのそれぞれは、図８におけるテーブルＴｂ１の右側に記載したように変化していく。そして、最終的に「ＺＢ＝３，ＺＭ＝２」となる。つまり、図８の例では、テーブルＴｂ１において６番目に記録されている対応情報が、書込領域に関する最新の対応情報であり、Ｓ３５０にて最後に肯定判定される対応情報となる。そして、その６番目の対応情報に含まれるブロック情報とマークとの各値が、暫定最新ブロック値ＺＢと暫定最新マーク値ＺＭとの、最終値となり、「Ｂｒ」，「Ｍｒ」として記憶される。
【００９５】
〈第２の特定処理〉
図９に示すように、ＣＰＵ１５が図５のＳ１３０で行う第２の特定処理は、図７に示した第１の特定処理と比較すると、Ｓ４５０，Ｓ４９０，Ｓ４９５の処理内容が異なる。
【００９６】
なお、他のＳ４１０〜Ｓ４４０，Ｓ４６０〜Ｓ４８０の各処理は、図７のＳ３１０〜Ｓ３４０，Ｓ３６０〜Ｓ３８０と同じ処理である。そして、Ｓ４１０〜Ｓ４４０，Ｓ４６０〜Ｓ４８０の各ステップ番号は、図７のＳ３１０〜Ｓ３４０，Ｓ３６０〜Ｓ３８０に対して「１００」を加えた番号になっている。このため、Ｓ４１０〜Ｓ４４０，Ｓ４６０〜Ｓ４８０については説明を省略する。
【００９７】
図９に示すように、ＣＰＵ１５は、特定された最新テーブルからＳ４３０で読み出したＩ番目の対応情報が、ブランクデータでなければ、Ｓ４４０からＳ４５０に進む。
ＣＰＵ１５は、Ｓ４５０では、Ｓ４３０で読み出したＩ番目の対応情報について、その対応情報に含まれる領域情報が、更新対象プログラムの格納領域を示す領域情報であり、且つ、その対応情報に含まれるマークの値が暫定最新マーク値ＺＭよりも大きい、か否かを判定する。そして、ＣＰＵ１５は、Ｓ４５０で肯定判定したならば、Ｓ４６０に進み、Ｓ４５０で否定判定したならば、そのままＳ４７０に進む。
【００９８】
なお、第２の特定処理では、更新対象プログラムの格納領域に関する対応情報を探索対象としている。このため、Ｓ４５０では、領域情報が、更新対象プログラムの格納領域を示す領域情報であるか否かを判定することにより、Ｓ４３０で読み出した対応情報が探索対象の対応情報であるか否かを判定している。
【００９９】
また、ＣＰＵ１５は、Ｓ４７０にて、インデックスＩが最新テーブルの終端を示す値であると判定した場合、あるいは、Ｓ４４０にて、Ｓ４３０で読み出した対応情報がブランクデータであると判定した場合には、Ｓ４９０に進む。
【０１００】
ＣＰＵ１５は、Ｓ４９０では、ブロック１〜４のうち、暫定最新ブロック値ＺＢが示すブロックが、更新対象プログラムの格納領域であると特定する。そして、ＣＰＵ１５は、次のＳ４９５にて、暫定最新ブロック値ＺＢを「Ｂｔ」として記憶すると共に、暫定最新マーク値ＺＭを「Ｍｔ」として記憶し、その後、当該第２の特定処理を終了する。
【０１０１】
このような第２の特定処理では、Ｓ４３０にて最新テーブルから１つずつ読み出される対応情報のうち、Ｓ４５０で最後に肯定判定された対応情報が、探索対象のうちで最新の対応情報、すなわち更新対象プログラムの格納領域に関する最新の対応情報として特定される。そして、その特定された対応情報に含まれるブロック情報とマークとの各値が、暫定最新ブロック値ＺＢと暫定最新マーク値ＺＭとの、それぞれの最終値となり、その各値が「Ｂｔ」，「Ｍｔ」として記憶される。
【０１０２】
つまり、第２の特定処理が終了した時点において、暫定最新ブロック値ＺＢは、更新対象プログラムの格納領域であるブロックの番号を示し、そのブロックの番号が「Ｂｔ」として記憶される。また、第２の特定処理が終了した時点において、暫定最新マーク値ＺＭは、更新対象プログラムの格納領域に関する最新の対応情報のマーク値を示し、そのマーク値が「Ｍｔ」として記憶される。なお、「Ｂｔ」は、前述した具体例での「Ｂ２」に相当し、「Ｍｔ」は、前述した具体例での「Ｍ２」に相当する。
【０１０３】
〈テーブル更新処理〉
図１０に示すように、ＣＰＵ１５は、図５のＳ１８０におけるテーブル更新処理では、まずＳ５００にて、空き領域特定処理を行う。空き領域特定処理は、特定された最新テーブルに、２つの空き領域があるか否かを判定すると共に、その２つの空き領域を特定する処理である。
【０１０４】
そして、図１１に示すように、ＣＰＵ１５は、空き領域特定処理を開始すると、Ｓ６１０にて、前述のインデックスＩを初期値の「１」にする。
ＣＰＵ１５は、次のＳ６２０にて、特定された最新テーブルから、インデックスＩによって示されるＩ番目と「Ｉ＋１」番目との２つの対応情報を読み出す。そして、ＣＰＵ１５は、次のＳ６３０にて、Ｓ６２０で読み出した２つの対応情報が、両方ともブランクデータであるか否かを判定する。
【０１０５】
ＣＰＵ１５は、Ｓ６３０で否定判定した場合に、すなわち、Ｓ６２０で読み出した２つの対応情報の少なくとも一方がブランクデータでなかった場合には、Ｓ６４０に進む。
ＣＰＵ１５は、Ｓ６４０では、「Ｉ＋１」が、最新テーブルの終端を示す値であるか否かを判定し、「Ｉ＋１」が終端を示す値でなければ、Ｓ６５０に進む。ＣＰＵ１５は、Ｓ６５０では、インデックスＩをインクリメントし、その後、Ｓ６２０に戻って、Ｓ６２０以降の処理を行う。
【０１０６】
また、ＣＰＵ１５は、Ｓ６４０にて、「Ｉ＋１」が終端を示す値であると判定した場合には、Ｓ６６０に進み、特定された最新テーブルに２つの空き領域がないと判定する。具体的には、２つの空き領域があるか否かの判定結果を「空き領域なし」に設定する。そして、ＣＰＵ１５は、その後、当該空き領域特定処理を終了する。
【０１０７】
一方、ＣＰＵ１５は、Ｓ６３０で肯定判定した場合、すなわち、Ｓ６２０で読み出した２つの対応情報が両方ともブランクデータであった場合には、Ｓ６７０に進み、特定された最新テーブルに２つの空き領域があると判定する。具体的には、２つの空き領域があるか否かの判定結果を「空き領域あり」に設定する。更に、この場合、ＣＰＵ１５は、特定された最新テーブルにおける対応情報の記録領域のうち、インデックスＩによって示されるＩ番目と「Ｉ＋１」番目との記録領域を、２つの空き領域として特定する。その後、ＣＰＵ１５は、当該空き領域特定処理を終了する。
【０１０８】
図１０に示すように、ＣＰＵ１５は、空き領域特定処理を終了すると、Ｓ５１０進む。そして、ＣＰＵ１５は、Ｓ５１０では、空き領域特定処理による判定結果を参照することにより、最新テーブルに２つの空き領域があるか否かを判定し、２つの空き領域があると判定した場合には、Ｓ５２０に進む。
【０１０９】
ＣＰＵ１５は、Ｓ５２０では、特定された最新テーブルにおける対応情報の記録領域のうち、インデックスＩによって示されるＩ番目の記録領域に、新たな第１の対応情報を書き込む。なお、この時点におけるインデックスＩの値は、空き領域特定処理が実行されたことによるインデックスＩの最終値である。
【０１１０】
新たな第１の対応情報は、更新対象プログラムの格納領域に関する新たな対応情報である。このため、新たな第１の対応情報には、領域情報として、更新対象プログラムの格納領域を示す領域情報が含まれ、ブロック情報としては、第１の特定処理で記憶した「Ｂｒ」が含まれる。そして、マークとしては、第２の特定処理で記憶した「Ｍｔ」に１を加算した値、すなわち「Ｍｔ＋１」が含まれる。
【０１１１】
このような新たな第１の対応情報がテーブルに書き込まれることにより、更新対象プログラムの格納領域に関する対応情報である第１の対応情報は、更新対象プログラムの格納領域が、プログラムの更新前に書込領域であったブロックであることを示す対応情報（すなわち、新たな第１の対応情報）に更新される。
【０１１２】
更に、ＣＰＵ１５は、次のＳ５３０では、特定された最新テーブルにおける対応情報の記録領域のうち、インデックスＩによって示される「Ｉ＋１」番目の記録領域に、新たな第２の対応情報を書き込む。そして、ＣＰＵ１５は、その後、当該テーブル更新処理を終了する。
【０１１３】
新たな第２の対応情報は、書込領域に関する新たな対応情報である。このため、新たな第２の対応情報には、領域情報として、書込領域を示す「書込」が含まれ、ブロック情報としては、第２の特定処理で記憶した「Ｂｔ」が含まれる。そして、マークとしては、第１の特定処理で記憶した「Ｍｒ」に１を加算した値、すなわち「Ｍｒ＋１」が含まれる。
【０１１４】
このような新たな第２の対応情報がテーブルに書き込まれることにより、書込領域に関する対応情報である第２の対応情報は、書込領域が、更新前のプログラムが格納されていたブロックであることを示す対応情報（すなわち、新たな第２の対応情報）に更新される。
【０１１５】
一方、ＣＰＵ１５は、Ｓ５１０にて、最新テーブルに２つの空き領域がないと判定した場合には、使用するテーブルを切り換えるために、Ｓ５４０に進む。
ＣＰＵ１５は、Ｓ５４０では、特定された最新テーブルから、引き継ぎ対象の対応情報を特定する。
【０１１６】
引き継ぎ対象の対応情報とは、特定された最新テーブルに記録されている対応情報のうち、更新対象プログラム以外のプログラムの格納領域に関する最新の対応情報である。例えば、プログラムＣが更新対象プログラムであるとすると、プログラムＡ領域に関する最新の対応情報と、プログラムＢ領域に関する最新の対応情報とが、引き継ぎ対象の対応情報である。
【０１１７】
また、引き継ぎ対象の対応情報を特定する処理は、図９に示した第２の特定処理と同様の処理で良い。例えば、特定された最新テーブルから、引き継ぎ対象の対応情報として、プログラムＡ領域に関する最新の対応情報を特定するのであれば、ＣＰＵ１５は、プログラムＡ領域に関する対応情報を探索対象として、第２の特定処理と同様の処理を実行すれば良い。すなわち、Ｓ４５０では、特定された最新テーブルから読み出したＩ番目の対応情報について、その対応情報に含まれる領域情報が、プログラムＡ領域を示す領域情報であり、且つ、その対応情報に含まれるマークの値が暫定最新マーク値ＺＭよりも大きい、か否かを判定すれば良い。
【０１１８】
そして、ＣＰＵ１５は、次のＳ５５０にて、Ｓ５４０で特定した引き継ぎ対象の対応情報を、特定された最新テーブルから読み出して、他方テーブルに書き込む。他方テーブルは、テーブルＴｂ１，Ｔｂ２のうち、特定された最新テーブルとは異なる方のテーブルである。なお、本実施形態では、部分プログラムが３つであるため、他方テーブルにおける対応情報の記録領域のうち、先頭から１番目と２番目の記録領域に、引き継ぎ対象の２つの対応情報が書き込まれることとなる。
【０１１９】
更に、ＣＰＵ１５は、次のＳ５６０にて、他方テーブルに、前述した新たな第１の対応情報を書き込み、次のＳ５７０にて、他方テーブルに、前述した新たな第２の対応情報を書き込む。本実施形態では、他方テーブルにおける対応情報の記録領域のうち、３番目の記録領域に、新たな第１の対応情報が書き込まれ、４番目の記録領域に、新たな第２の対応情報が書き込まれることとなる。
【０１２０】
ＣＰＵ１５は、次のＳ５８０にて、特定された最新テーブルのテーブル用マーク値を読み出し、その読み出したテーブル用マーク値に１を加算した値を、新たなテーブル用マーク値として算出する。そして、ＣＰＵ１５は、次のＳ５９０にて、他方テーブルの判別用領域３１に、Ｓ５８０で算出した新たなテーブル用マーク値を書き込む。
【０１２１】
ＣＰＵ１５は、次のＳ６００にて、特定された最新テーブルの記録内容を消去し、その後、当該テーブル更新処理を終了する。
その後、テーブル特定処理が実行されたならば、他方テーブルが最新テーブルであると特定されることとなる。
【０１２２】
なお、他の変形例として、各テーブルＴｂ１，Ｔｂ２のテーブル用マークが書き込まれる判別用領域３１は、テーブルＴｂ１，Ｔｂ２のそれぞれと対応付けられていれば良く、テーブルＴｂ，Ｔｂ２とは別に設けられても良い。例えば、判別用領域３１は、フラッシュメモリ１６の記憶領域のうち、テーブルＴｂ１，Ｔｂ２が格納されるブロック５，６とは別の記憶領域や、フラッシュメモリ１６とは別の書き換え可能な不揮発性メモリ等に設けられても良い。そして、この場合、Ｓ６００では、特定された最新テーブルに記録されている対応情報だけを消去し、テーブル用マークは消去しないようになっていても良い。このように変形すると、テーブルＴｂ１，Ｔｂ２の両方のテーブル用マークが存在することとなるが、図６のテーブル特定処理では、Ｓ２７０〜Ｓ２９０の処理があるため、最新テーブルを正しく特定することができる。
【０１２３】
また、本実施形態では、テーブル用マーク値に１を加算していくようにしているが、加算する値は１以外でも良い。
［ＣＰＵが制御プログラムを実行するための処理］
ＣＰＵ１５は、少なくとも起動した直後に、図１２の処理を実行する。
【０１２４】
図１２に示すように、ＣＰＵ１５は、まずＳ７１０にて、図６に示したテーブル特定処理を行うことにより、最新テーブルを特定する。
ＣＰＵ１５は、次のＳ７２０にて、Ｓ７１０で特定した最新テーブルに基づいて、ブロック１〜４のうち、各プログラムＡ〜Ｃが格納されているブロックのそれぞれを特定する。具体的には、Ｓ７１０で特定した最新テーブルを対応情報の読み出し先とし、且つ、各プログラムＡ〜Ｃの格納領域に関する対応情報のそれぞれを探索対象として、図９の第２の特定処理と同様の処理を行うことで、各プログラムＡ〜Ｃが格納されているブロックのそれぞれを特定する。例えば、プログラムＡが格納されているブロックを特定するのであれば、プログラムＡ領域に関する対応情報を探索対象として、第２の特定処理と同様の処理を実行すれば良い。
【０１２５】
そして、ＣＰＵ１５は、次のＳ７３０にて、特定した各ブロックに格納されているプログラムＡ〜Ｃの実行を開始する。
このような図１２の処理と、図５の書換制御処理とを、ＣＰＵ１５が行うことにより、「プログラム書き換えの概要」の欄で説明したＣＰＵ１５の動作と、「使用するテーブルの切り換え」の欄で説明したＣＰＵ１５の動作とが、実現される。
【０１２６】
なお、ＣＰＵ１５は、更新対象プログラムの書き込み及びテーブルの更新を完了した直後に、図１２のＳ７１０及びＳ７２０と同様の処理を行うことにより、更新対象プログラムとして、新たなプログラムを実行するようになっていても良い。
【０１２７】
［効果］
以上詳述した実施形態によれば、以下の効果が得られる。
（１）本実施形態のＥＣＵ１３において、テーブルＴｂには、プログラムＡ〜Ｃの各格納領域と書込領域とのそれぞれである各用途別領域について、その用途別領域がフラッシュメモリ１６のブロック１〜４のうちのどれであるかを示す対応情報が記録される。
【０１２８】
そして、ＣＰＵ１５は、テーブルＴｂにおける対応情報に基づいて、ブロック１〜４のうち、各プログラムＡ〜Ｃが格納されているブロックのそれぞれを特定し、その特定した各ブロックに格納されている各プログラムＡ〜Ｃを実行する。この処理は、図１２のＳ７１０〜Ｓ７３０によって実現される。
【０１２９】
また、ＣＰＵ１５は、プログラムＡ〜Ｃの何れかである更新対象プログラムを更新する場合には、テーブルＴｂにおける対応情報に基づいて、ブロック１〜４のうち、書込領域であるブロックを特定し、その特定したブロックに、内容が更新された新たな更新対象プログラムを書き込む。この処理は、図５のＳ１１０，Ｓ１２０，Ｓ１４０，Ｓ１７０によって実現される。
【０１３０】
そして、ＣＰＵ１５は、更新対象プログラムの書き込みを実施した場合に、テーブルＴｂにおける対応情報を最新の内容に更新する。具体的には、更新対象プログラムの格納領域に関する対応情報である第１の対応情報を、更新対象プログラムの格納領域が、プログラムの更新前に書込領域であったブロックであることを示す新たな第１の対応情報に更新する。また、書込領域に関する対応情報である第２の対応情報を、書込領域が、更新前の更新対象プログラムが格納されていたブロックであることを示す新たな第２の対応情報に更新する。この処理は、図１０のＳ５００〜Ｓ５７０によって実現される。
【０１３１】
このようなＥＣＵ１３によれば、制御プログラムの実行中においても、その制御プログラムを構成する部分プログラムＡ〜Ｃの何れかである更新対象プログラムを、更新することができる。
【０１３２】
つまり、制御プログラムの実行中においても、フラッシュメモリ１６のブロック１〜４のうち、テーブルＴｂにより書込領域であると示されるブロックに、内容が更新された新たな更新対象プログラムを書き込むことができる。そして、テーブルＴｂの記録内容が更新され、ＣＰＵ１５が、その更新されたテーブルＴｂを参照することで、更新対象プログラムについては、書込領域であったブロックに書き込まれた新たなプログラムを実行することとなる。更に、更新されたテーブルＴｂでは、ブロック１〜４のうち、更新前の更新対象プログラムが格納されていたブロックが、書込領域として記録される。このため、更新前の更新対象プログラムが格納されていたブロックは、次回にプログラムＡ〜Ｃの何れかを更新する際に、新たなプログラムが書き込まれる書込領域として用いられる。
【０１３３】
そして、このＥＣＵ１３では、ブロック１〜４のうち、書込領域として用いられるブロックは、複数の部分プログラムＡ〜Ｃに対して１つで済む。つまり、複数の部分プログラムＡ〜Ｃ毎に格納領域を２つずつ用意する必要がない。このため、必要なメモリのサイズを低減することができる。
【０１３４】
（２）テーブルＴｂに記憶される対応情報のそれぞれには、その対応情報が、同じ領域に関する対応情報のうちで最新であるか否かを判別可能なマークが含まれる。そして、ＣＰＵ１５は、テーブルＴｂにおける第１の対応情報と第２の対応情報とを更新する際には、テーブルＴｂの空き領域に、新たな第１の対応情報と新たな第２の対応情報とを追加して書き込むと共に、その書き込む各対応情報に含まれるマークを、当該対応情報が最新であることを示すマークにする。このため、テーブルＴｂの記録内容を更新するための処理時間を、短縮することができる。
【０１３５】
比較例として、テーブルＴｂの記録内容を更新する処理としては、テーブルＴｂの記録内容を一旦消去し、その消去後のテーブルＴｂに新しい内容を書き込む、という処理でも良い。ただし、一般に、フラッシュメモリ１６におけるブロックの消去に要する時間は、書き込みに要する時間よりも長い。このため、テーブルＴｂの記録内容を更新する毎に消去を実施するのは、時間効率が悪い。
【０１３６】
これに対して、上記実施形態では、テーブルＴｂに新たな第１の対応情報と新たな第２の対応情報とを追加して書き込むことで、テーブルＴｂの記録内容の更新を行うため、時間のかかる消去を行わずに済む。
【０１３７】
また、上記比較例では、テーブルＴｂの記録内容を消去してから、その消去後のテーブルＴｂに新しい内容を書き込むまでの間に、電源遮断が起こると、対応情報が失われてプログラムＡ〜Ｃの格納先が不明になってしまう。一方、本実施形態によれば、このような懸念も回避することができる。
【０１３８】
（３）ＥＣＵ１３は、テーブルＴｂとして、第１のテーブルＴｂ１と、第２のテーブルＴｂ２とを備える。そして、ＣＰＵ１５は、図６のテーブル特定処理により、２つのテーブルＴｂ１，Ｔｂ２のうち、最新テーブルを特定し、その特定された最新テーブルに記録されている対応情報に基づいて、書込領域であるブロックを特定するようになっている。
【０１３９】
更に、ＣＰＵ１５は、特定された最新テーブルに、新たな第１の対応情報と前記新たな第２の対応情報とを追加して書き込むことが可能な空き領域があるか否かを判定する。空き領域有無の判定は、図１０のＳ５００によって実現される。
【０１４０】
そして、ＣＰＵ１５は、最新テーブルに空き領域があれば、その最新テーブルの空き領域に、新たな第１の対応情報と新たな第２の対応情報とを追加して書き込むと共に、その書き込む各対応情報に含まれるマークを、当該対応情報が最新であることを示すマークにする。この処理は、図１０のＳ５２０，Ｓ５３０によって実現される。
【０１４１】
また、ＣＰＵ１５は、最新テーブルに空き領域がなければ、その最新テーブルに記録されている対応情報に基づいて、各領域に関する最新の対応情報を作成すると共に、その最新の対応情報を、対応情報が消去されている状態の他方テーブルに書き込む。この処理は、図１０のＳ５４０〜Ｓ５７０によって実現される。そして、ＣＰＵ１５は、他方テーブルへの対応情報の書き込みを完了した後、特定された最新テーブルに記録されている対応情報を消去する。この処理は、図１０のＳ６００によって実現される。
【０１４２】
以上のことにより、ＣＰＵ１５は、２つのテーブルＴｂ１，Ｔｂ２の一方に空き領域がなくなっても、他方のテーブルに、各領域に関する最新の対応情報を移して、該他方のテーブルを用いることができる。よって、プログラムの書き換え回数が多くなっても、テーブルＴｂにおける対応情報の記録領域が不足してしまうことを回避することができる。
【０１４３】
（４）ＣＰＵ１５は、図１０のＳ５４０，Ｓ５５０では、特定された最新テーブルに記録されている対応情報のうち、更新対象プログラム以外のプログラムの格納領域に関する最新の対応情報を、引き継ぎ対象の対応情報として、他方テーブルに書き込む。そして、ＣＰＵ１５は、図１０のＳ５６０，Ｓ５７０では、他方テーブルに、新たな第１の対応情報と新たな第２の対応情報とを書き込むと共に、その書き込む各対応情報に含まれるマークを、当該対応情報が最新であることを示すマークにする。
【０１４４】
このため、各領域に関する最新の対応情報を作成して、それら最新の対応情報を他方テーブルに書き込むことを、少ない処理で実現することができる。
（５）２つのテーブルＴｂ１，Ｔｂ２のそれぞれに対して設けられた判別用領域３１があり、その判別用領域３１には、２つのテーブルＴｂ１，Ｔｂ２のうちのどちらが最新テーブルであるかを判別可能なテーブル用マークが書き込まれる。そして、ＣＰＵ１５は、テーブル特定処理では、２つのテーブルＴｂ１，Ｔｂ２のテーブル用マークに基づいて、最新テーブルを特定するようになっている。また、ＣＰＵ１５は、図１０のＳ５４０〜Ｓ５７０の処理を行った場合には、他方テーブルの判別用領域３１に、他方テーブルがテーブル特定処理によって最新テーブルであると特定されるためのテーブル用マークを書き込む。この処理は、図１０のＳ５８０，Ｓ５９０によって実現される。
【０１４５】
このため、使用されるテーブルを、特定された最新テーブルから他方テーブルに、確実に切り換えることができる。
なお、本実施形態では、フラッシュメモリ１６が、メモリに相当し、ブロック１〜４が、複数の記憶部に相当する。また、ＣＰＵ１５が、実行部、書込処理部、更新部、消去部及びテーブル切替部のそれぞれとして機能する。そして、Ｓ７１０〜Ｓ７３０が、実行部としての処理に相当し、Ｓ１１０，Ｓ１２０，Ｓ１４０，Ｓ１７０が、書込処理部としての処理に相当し、Ｓ５００〜Ｓ５７０が、更新部としての処理に相当し、Ｓ６００が、消去部としての処理に相当し、Ｓ５８０，Ｓ５９０が、テーブル切替部としての処理に相当する。また、Ｓ１１０は、書込処理部におけるテーブル特定部としての処理に相当する。Ｓ５００は、更新部における判定部としての処理に相当し、Ｓ５２０，Ｓ５３０は、更新部における第１の書込部としての処理に相当し、Ｓ５４０〜Ｓ５７０は、更新部における第２の書込部としての処理に相当する。Ｓ５４０，Ｓ５５０は、第２の書き込み処理が行う第１処理に相当し、Ｓ５６０，Ｓ５７０は、第２の書き込み処理が行う第２処理に相当する。また、テーブル用マークが判別用情報に相当する。
【０１４６】
［他の実施形態］
以上、本発明を実施するための形態について説明したが、本発明は上述の実施形態に限定されることなく、種々変形して実施することができる。
【０１４７】
例えば、テーブルＴｂ１，Ｔｂ２を格納する領域は、フラッシュメモリ１６とは別の書き換え可能な不揮発性メモリに設けられても良い。また、図５の書換制御処理を実現するプログラムは、フラッシュメモリ１６とは別の不揮発性メモリに格納されていても良い。また、図５の書換制御処理を実現する手法は、ソフトウェアに限るものではなく、その一部又は全部を、論理回路やアナログ回路等を組み合わせたハードウェアを用いて実現しても良い。また、制御プログラムが格納されるメモリとしては、フラッシュメモリ１６に限らず、ＥＥＰＲＯＭなど、他の種類の書き換え可能なメモリでも良い。また、ＥＣＵ１３と書換装置２２との通信は、有線の通信であっても良い。また、テーブルＴｂは１つでも良い。また、ＥＣＵ１３を構成するマイコン１４の数は複数でも良い。
【０１４８】
一方、上記実施形態における１つの構成要素が有する複数の機能を、複数の構成要素によって実現したり、１つの構成要素が有する１つの機能を、複数の構成要素によって実現したりしても良い。また、複数の構成要素が有する複数の機能を、１つの構成要素によって実現したり、複数の構成要素によって実現される１つの機能を、１つの構成要素によって実現したりしても良い。また、上記実施形態の構成の一部を省略しても良い。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【０１４９】
また、上述したＥＣＵ１３の他、ＥＣＵ１３を構成要素とするシステム、ＥＣＵ１３としてコンピュータを機能させるためのプログラム、このプログラムを記録した半導体メモリ等の非遷移的実態的記録媒体、プログラム書き換え方法など、種々の形態で本発明を実現することもできる。
【符号の説明】
【０１５０】
１〜４…ブロック、１３…ＥＣＵ、１５…ＣＰＵ、１６…フラッシュメモリ、Ａ〜Ｃ…プログラム、Ｔｂ１，Ｔｂ２…テーブル
【図１】
2017173977.tif 000003
【図２】
2017173977.tif 000004
【図３】
2017173977.tif 000005
【図４】
2017173977.tif 000006
【図５】
2017173977.tif 000007
【図６】
2017173977.tif 000008
【図７】
2017173977.tif 000009
【図８】
2017173977.tif 000010
【図９】
2017173977.tif 000011
【図１０】
2017173977.tif 000012
【図１１】
2017173977.tif 000013
【図１２】
2017173977.tif 000014