フラッシュメモリ5に対してデータの読み出しおよび書き込みを行う制御装置であって、前記フラッシュメモリ5は、データ消去の単位となるブロックを複数有して構成され、前記制御装置は、現在の記録先のブロック以外の次のブロックを抽出し、抽出した前記次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定する消去判定手段150、160、175、180、205、210、215、220、225、230、235、240と、前記次のブロックのデータの消去に成功したと前記消去判定手段が判定したことに基づいて、当該消去に成功したブロックを、新たな記録先のブロックとし、それまでの記録先のブロックから、一部のレコードを読み出して現在の記録先のブロックにコピーする有効データコピー手段170と、を備え、前記消去判定手段は、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、更に次のブロックを検索して抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、前記有効データコピー手段170は、前記更に次のブロックの消去に成功したと前記消去判定手段が判定したことに基づいて、当該消去に成功したブロックを、新たな記録先のブロックとすることを特徴とする制御装置。前記消去判定手段は、前記次のブロックのデータの消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、ブロックの故障時にのみ使用される予備ブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする請求項1に記載の制御装置。前記フラッシュメモリ5に記録するレコードの記録先を、当該レコードが含むデータの種別に応じて仕分けするため、前記フラッシュメモリ5の前記複数のブロックが、複数のエリアに区分けされており、前記消去判定手段は、前記記録先のエリア用のブロック群に属するブロックから次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、前記記録先のエリア用のブロック群に属すると共にブロックの故障時にのみに使用されるブロックである予備ブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする請求項1または2に記載の制御装置。前記フラッシュメモリ5に記録するレコードの記録先を、当該レコードが含むデータの種別に応じて仕分けするため、前記フラッシュメモリ5の前記複数のブロックが、複数のエリアに区分けされており、前記消去判定手段は、前記記録先のエリア用のブロック群に属するブロックから次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、どのエリア用のブロック群にも属さない予備エリア内に属するブロックである予備ブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする請求項1ないし3のいずれか1つに記載の制御装置。前記フラッシュメモリ5に記録するレコードの記録先を、当該レコードが含むデータの種別に応じて仕分けするため、前記フラッシュメモリ5の前記複数のブロックが、複数のエリアに区分けされており、前記消去判定手段は、前記複数のエリアのうち記録先のエリア用のブロック群に属するブロックから次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定して、前記次のブロックを前記記録先のエリア用のブロック群から除外し、前記複数のエリアのうち、データの記録頻度が最も低いエリアとしてあらかじめ定められたエリアである交換対象エリアに属するブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックを前記記録先のエリア用のブロック群に含め、抽出した前記更に次のブロックを前記交換対象エリア用のブロック群から除外し、抽出したブロックに現在記録されているレコードの一部を、前記故障したと判定したブロックにコピーし、前記故障したと判定したブロックを、前記交換対象エリア用のブロック群に含め、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする請求項1に記載の制御装置。しかし、特許文献1のような技術では、ブロックへのデータの書き込みが失敗するまで、ブロックの故障を検知できないので、データをブロックからブロックへコピーする回数が多くなってしまうという問題がある。例えば、データを1000個程度有するブロックAが故障して100番目のデータの書き込みができなくなっている場合、1~99番目までのデータが書き込まれた後、100番目のデータの書き込みが失敗して、ブロックAが故障だと判定し、ブロックAから次のブロックBに必要なデータをコピーする。この場合、通常ならば1000回毎に訪れるコピーのタイミングが、100回目で訪れることになり、その結果、ブロック間のコピー頻度が増大してしまい、その結果、制御装置の処理負荷が増大してしまう。本発明は上記点に鑑み、次のブロックのデータを消去して新たな記録先のブロックとし、前回の記録先のブロックのデータのうち、一部の必要なデータを現在の記録先のブロックにコピーし、その後、現在の記録先のブロックに順次データを記録していくというフラッシュメモリの書き込み制御において、ブロックの故障に起因してブロック間のデータのコピー頻度が増大するのを防ぐことを目的とする。上記目的を達成するための請求項1に記載の発明は、フラッシュメモリ5に対してデータの読み出しおよび書き込みを行う制御装置であって、前記フラッシュメモリ5は、データ消去の単位となるブロックを複数有して構成され、前記制御装置は、現在の記録先のブロック以外の次のブロックを抽出し、抽出した前記次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定する消去判定手段150、160、175、180、205、210、215、220、225、230、235、240と、前記次のブロックのデータの消去に成功したと前記消去判定手段が判定したことに基づいて、当該消去に成功したブロックを、新たな記録先のブロックとし、それまでの記録先のブロックから、一部のレコードを読み出して現在の記録先のブロックにコピーする有効データコピー手段170と、を備え、前記消去判定手段は、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、更に次のブロックを検索して抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、前記有効データコピー手段170は、前記更に次のブロックの消去に成功したと前記消去判定手段が判定したことに基づいて、当該消去に成功したブロックを、新たな記録先のブロックとすることを特徴とする制御装置である。このように、本発明の制御装置は、消去が失敗したか否かを判定し、消去に失敗したと判定したことに基づいて、次のブロックが故障したと判定することで、当該次のブロックにレコードを書き込む前に故障を検知でき、また、更に次のブロックのデータの消去を試み、消去に成功した場合に当該更に次のブロックを新たな記録先とすることで、故障しているブロックへのコピーをスキップすることができる。したがって、故障しているブロックにデータを何回か書き込んだ後に故障を検出するよりも早く、故障しているブロックにデータを書き込む前に、故障を検知できるので、故障したブロックから次のブロックにデータをコピーする必要がなくなる。その結果、ブロックの故障に起因してブロック間のデータのコピー頻度が増大するのを防ぐことができる。一般に、ブロックにデータを書き込むときにフラッシュメモリ5にかける電気的負荷は、ブロックのデータを消去するときにフラッシュメモリ5にかける電気的負荷よりも低い。したがって、ブロックのデータの消去に失敗した場合の方が、データの書き込みに失敗した場合よりも、ブロックが壊れている可能性が高い。逆に言えば、データの書き込みに失敗した場合は、まだそのブロックが壊れておらず、一時的な原因によってそのブロックが書き込み不能になったに過ぎない可能性が高い。そこで、このことを利用して、記録先のブロックのある領域に書き込もうとして失敗したとしても、直ちにそのブロックを故障であると判定せず、そのブロックの他の領域に書き込みをリトライすることで、ブロックを従来よりも有効活用することができる。また、レコードの書き込みに失敗した場合でも、直ちにレコードを他のブロックにコピーすることがないので、ブロック間のコピーを行う回数が増加しない。そのため、データ記憶に失敗しても全体の処理時間は増加せず、処理負荷を低減することができる。このように、ブロックが故障したと判定した場合に使用対象のブロック群に含まれない予備のブロックを使用対象のブロック群に含めて用いることで、使用対象のブロック群の数を減らすことなく処理を続けることができ、また、使用回数の少ない予備ブロックを用いることで、より確実にレコードを書き込むことができる。また、請求項2に記載の発明は、請求項1に記載の制御装置において、前記消去判定手段は、前記次のブロックのデータの消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、ブロックの故障時にのみ使用される予備ブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする。このように、ブロックが故障したと判定した場合に、予備のブロックを用いることで、使用するブロック群の数を減らすことなく処理を続けることができ、また、使用回数の少ない予備ブロックを用いることで、より確実にレコードを書き込むことができる。また、請求項3に記載の発明は、請求項1または2に記載の制御装置において、前記フラッシュメモリ5に記録するレコードの記録先を、当該レコードが含むデータの種別に応じて仕分けするため、前記フラッシュメモリ5の前記複数のブロックが、複数のエリアに区分けされており、前記消去判定手段は、前記記録先のエリア用のブロック群に属するブロックから次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、前記記録先のエリア用のブロック群に属すると共にブロックの故障時にのみに使用されるブロックである予備ブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする。このように、記録先のエリア用のブロック群の1つを予備ブロックとして用いることで、当該エリアの予備ブロックのストックをより確実に確保することができる。また、請求項4に記載の発明は、請求項1ないし3のいずれか1つに記載の制御装置において、前記フラッシュメモリ5に記録するレコードの記録先を、当該レコードが含むデータの種別に応じて仕分けするため、前記フラッシュメモリ5の前記複数のブロックが、複数のエリアに区分けされており、前記消去判定手段は、前記記録先のエリア用のブロック群に属するブロックから次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定し、どのエリア用のブロック群にも属さない予備エリア内に属するブロックである予備ブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする。このように、ブロックが故障したと判定した場合に、予備のブロックを使用対象のブロック群に含めて用いることで、使用するブロック群の数を減らすことなく処理を続けることができ、また、使用回数の少ない予備ブロックを用いることで、より確実にレコードを書き込むことができる。また、複数のエリアのブロックの予備として共用することができる予備ブロックを有することで、予備ブロックの汎用性が増す。また、請求項5に記載の発明は、請求項1に記載の制御装置において、前記フラッシュメモリ5に記録するレコードの記録先を、当該レコードが含むデータの種別に応じて仕分けするため、前記フラッシュメモリ5の前記複数のブロックが、複数のエリアに区分けされており、前記消去判定手段は、前記複数のエリアのうち記録先のエリア用のブロック群に属するブロックから次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定し、消去に失敗したと判定したことに基づいて、前記次のブロックが故障したと判定して、前記次のブロックを前記記録先のエリア用のブロック群から除外し、前記複数のエリアのうち、データの記録頻度が最も低いエリアとしてあらかじめ定められたエリアである交換対象エリアに属するブロックから、更に次のブロックを抽出し、抽出した前記更に次のブロックを前記記録先のエリア用のブロック群に含め、抽出した前記更に次のブロックを前記交換対象エリア用のブロック群から除外し、抽出したブロックに現在記録されているレコードの一部を、前記故障したと判定したブロックにコピーし、前記故障したと判定したブロックを、前記交換対象エリア用のブロック群に含め、抽出した前記更に次のブロックのデータの消去を試みると共に、消去に成功したか失敗したかを判定することを特徴とする。このように、現在の記録先のエリア用のブロック群に属するブロックの故障を検出した場合、更新頻度が最も低いとあらかじめ定められた交換対象エリアに属するブロックを、記録先のエリア用のブロック群に含め、さらに、その故障ブロックを、更新頻度の最も低い交換対象エリア用のブロック群に含めることで、更新頻度が高いデータは故障の可能性が低く、かつ書き込み回数や消去回数が低いブロックに記録することができ、他方、更新頻度が低いが故に必要な記憶領域が比較的小さいデータは、故障したと判定したブロックに記録することで、効率的なブロックの使用が実現する。なお、上記および特許請求の範囲における括弧内の符号は、特許請求の範囲に記載された用語と後述の実施形態に記載される当該用語を例示する具体物等との対応関係を示すものである。第1実施形態以下、本発明の第1実施形態について説明する。図1に、本実施形態に係るマイクロコントローラ1の構成を示す。このマイクロコントローラ1は、車両に搭載され、I/O2、ROM3、RAM4、フラッシュメモリ5、フラッシュコントローラ6、CPU7等を備えている。I/O2は、マイクロコントローラ1の外部の装置と信号の授受を行うためのインターフェース装置である。ROM3は、CPU7が実行するための各種プログラム等があらかじめ記憶された不揮発性の記憶媒体である。RAM4は、CPU7の作業用のメモリ領域である。フラッシュメモリ5は、データ消去の最小単位となるブロックを複数個本実施形態では3個以上有して構成されている。各ブロックのサイズは数キロバイト例えば、4キロバイトであり、1つのブロック内のあるデータを消去するには、そのブロック全体のデータを消去するすなわち、そのブロック全体のビットを1にとする必要がある。しかし、1つのブロック内にある特定のビットを1から0に書き替える場合は、マイコン依存で2バイトや4バイト単位でデータを書き換えることができる。これら複数のブロックは、CPU7およびフラッシュコントローラ6によって、1番目のブロック1が使用され、1番目のブロック1の使用が終了すると次に2番目のブロック2が使用されるという風に、順番に書き込みに使用されるようになっている。複数のブロックのそれぞれは、ヘッダフィールドおよびデータフィールドを有して構成される。各ヘッダフィールドに記録される情報から、使用中のブロックであるか未使用のブロックであるかを判別することができる。つまり、各ブロックは、CPU7およびフラッシュコントローラ6によって、当該ブロックの使用を始める際に、使用中である旨の情報が書き込まれる。データフィールドには、先頭のアドレスから順にレコードが順次記録されるようになっている。なお、レコードのデータサイズは、固定でも可変でもよいが、本実施形態では固定とする。また、レコードのデータサイズは、典型的には数十バイト程度の長さである。したがって、典型的には、1つのブロック内には、数十個~数百個程度のレコードが記録可能である。フラッシュコントローラ6は、CPU7の制御に従ってフラッシュメモリ5に対してデータの読み出しおよび書き込みを行う周知の装置である。具体的には、CPU7から特定のアドレスのデータの読み出し指令を受けると、当該アドレスに記録されたデータの内容をフラッシュメモリ5から読み出し、読み出した内容をCPU7に出力する。また、CPU7から特定のアドレスに特定のデータの書き込み指令を受けると、フラッシュメモリ5の当該アドレス位置へ、当該特定のデータを書き込むよう試み、書き込みに成功すると、書き込み成功の旨のメッセージをCPU7に出力し、書き込みに失敗すると、書き込み失敗の旨のメッセージをCPU7に出力する。また、CPU7からブロックの消去命令を受けると、フラッシュメモリ5の当該ブロックの全データの消去を試み、消去に成功すると、消去成功の旨のメッセージをCPU7に出力し、消去に失敗すると、消去失敗の旨のメッセージをCPU7に出力する。CPU7は、ROM3に記録されたプログラムを実行することで、種々の処理を実現し、その処理において、必要に応じ、I/O2を用いて外部と信号の授受を行い、ROM3からデータを読み出し、RAM4を作業領域として用い、フラッシュコントローラ6に上記のような各種指令を出力することで、フラッシュメモリ5へのデータの読み出しおよび書き込みを行う。以下、簡単のため、CPU7がフラッシュコントローラ6に読み出し指令を出力し、その読み出し指令に従ってフラッシュコントローラ6がフラッシュメモリ5からデータを読み出してCPU7に出力する作動については、単に、CPU7がフラッシュメモリ5からデータを読み出すと記載する。図1に示すように、ROM3には、CPU7が実行するプログラムとして、フラッシュドライバソフト、および、複数のアプリケーションソフトが格納されている。図2に、アプリケーションソフト、フラッシュドライバソフト、フラッシュコントローラ6、フラッシュメモリ5の階層構成を概念的に示す。CPU7は、これらアプリケーションソフトを実行することで、例えば、I/O2を介してドア開閉センサから信号を受け取って車両のドアの開閉を検出し、車両のエンジンの始動を検知するセンサから信号を受け取ってエンジンECUの始動を検出する。これらのようなアプリケーションを実行したときの処理により、フラッシュメモリ5にデータを記録する必要が発生する場合がある。例えば、エンジンを始動した回数を、その回数が変化する度にフラッシュメモリ5に記録する必要が発生し、ドアを開閉した回数を、その回数が変化する度にフラッシュメモリ5に記録する必要が発生する。このように、CPU7がアプリケーションソフトの実行において書き込みデータの書き込みの必要が発生すると、書き込みデータの書き込み要求をRAM4またはCPU7のレジスタに出力する書き込む。この書き込み要求は、書き込みデータの種別を示すデータID例えば、エンジンを始動した回数か、ドアを開閉した回数かの別と、書き込みデータのデータ値すなわち、書き込みデータの内容とを含むデータである。すると、CPU7は、書き込み要求が出力されたことに基づいて、フラッシュドライバソフトの実行を開始し、その実行処理において、書き込みデータをフラッシュメモリ5に記録するため、フラッシュコントローラ6に必要な指令を出力する。これにより、図41、2のように、書き込みデータがレコードとしてブロックのデータフィールドに順次追記方式で記録されていく。以下では、簡単のため、CPU7が、ある特定のアドレスにデータを書き込む書き込み指令をフラッシュコントローラ6に出力する処理を、単に、CPU7が、ブロックの特定のアドレスにデータを書き込むと記載する。また同様に、CPU7が、ある特定のアドレスからデータを読み出す読み出し指令をフラッシュコントローラ6に出力し、フラッシュコントローラ6から当該データを取得する処理を、単に、CPU7が、ある特定のアドレスからデータを読み出すと記載する。データの記録先となる条件を満たすブロックは、現在書き込み中のブロックか、あるいは、現在書き込み中のブロックにデータを書き込む空き領域がない場合は、現在書き込み中のブロックの次の未使用のブロック使用中でないブロックブロックである。以下、図3の消去処理について説明する。この消去処理は、例えば、アプリケーションソフトの実行においてブロックのデータ消去が必要になった際にCPU7が実行開始する。まずステップ150では、ヘッダフィールドに則って、次のブロックを検索する。具体的には、ヘッダフィールドによれば未使用であるブロックのうち、最も順番が早いブロックを使用する。この特定したブロック図43の例ではブロック2が、次のブロックである。更にステップ150では、データ消去が必要になったブロックのデータを消去するため、当該次のブロックのデータを消去する消去指令をフラッシュコントローラ6に出力する。これにより、フラッシュコントローラ6は、当該次のブロックのデータの消去を試み、消去に成功すると、消去成功の旨のメッセージをCPU7に出力し、消去に失敗すると、消去失敗の旨のメッセージをCPU7に出力する。続いてステップ160では、当該次のブロックのデータの消去に成功したか否かを、フラッシュコントローラ6からのメッセージに基づいて判定し、成功していると判定すれば、ステップ170に進む。ステップ170では、ヘッダフィールドから使用中のブロックを特定する。更に、図44に示すように、前回の記録先のブロックから、一部の必要なレコードを読み出し、読み出した各レコードを現在の記録先のブロック図4におけるブロック2に先頭アドレスデータフィールドの先頭アドレス。以下同じ。から順番にコピーする。コピーは、フラッシュコントローラ6に適宜読み出し指令および書き込み指令を出力することで実現する。コピーが終了すると、ステップ170を終了すると共に、消去処理を終了する。次に、ステップ160で、消去に失敗したと判定した場合について説明する。この場合、CPU7はステップ175に進み、消去に失敗したブロックを故障したブロックであると判定し、この故障したブロックのヘッダフィールドに、当該ブロックが故障している旨の情報を書き込む書き込み指令を、フラッシュコントローラ6に出力する。例えば、ステップ150で、図48のようにブロック1の消去を試み、ステップ160で、消去に失敗したと判定した場合は、図51に示すように、ブロック1を故障したブロックとみなし、ブロック1のヘッダフィールドに当該ブロックが故障している旨の情報を書き込む。続いてステップ180に進み、消去失敗回数は、消去失敗規定回数例えば、使用対象ブロック群リストに含まれるブロックの数から2を減算した数以内であるか否かを判定する。この消去失敗回数は、初期値を0とし、ステップ160で消去に失敗したと判定する度に1回分増加させる変数を、RAM4に記録させ、この変数を参照することで取得してもよいし、フラッシュコントローラ6中で、ヘッダフィールドに、故障したことを示すデータが書き込まれているブロックの数をカウントすることで取得してもよい。消去失敗回数が消去失敗規定回数以内でなければ、エラーメッセージを出力し、図3の処理を終了する。エラーメッセージの出力先は、書き込み要求を出力したアプリケーションへの戻り値を格納するRAM4上の変数領域であってもよいし、I/O2を介した他の装置例えば、異常検査装置であってもよい。更にステップ150では、検索の結果抽出した更に次のブロックブロック2のデータを消去するため、当該更に次のブロックのデータを消去する消去指令をフラッシュコントローラ6に出力する。これにより、フラッシュコントローラ6は、当該更に次のブロックのデータの消去を試み、消去に成功すると、消去成功の旨のメッセージをCPU7に出力し、消去に失敗すると、消去失敗の旨のメッセージをCPU7に出力する。このステップ150に続くステップ160以降の処理は、既に説明した通りである。このように、本実施形態では、次のブロックを抽出し、抽出した次のブロックのデータの消去を試みるステップ150と共に、消去に成功したか失敗したかを判定するステップ160。そして、消去に成功したと判定したことに基づいて、当該消去に成功したブロック当該次のブロックを、新たな記録先のブロックとし、前回の記録先のブロックから、有効なレコードを読み出して現在の記録先のブロックにコピーステップ170を行う。そして、ステップ160で消去に失敗したと判定したことに基づいて、当該次のブロックが故障したと判定しステップ175、更に次のブロックを検索して抽出し、抽出した当該更に次のブロックのデータの消去を試みるステップ150と共に、消去に成功したか失敗したかを判定するステップ160、そして、消去に成功したと判定したことに基づいて、当該消去に成功したブロック当該更に次のブロックを、新たな記録先のブロックとし、前回の記録先のブロックから、有効なレコードを読み出して現在の記録先のブロックにコピーするステップ170。このように、本発明の制御装置は、次のブロックの消去を試みたときに、消去が失敗したか否かを判定し、消去に失敗したと判定したことに基づいて、次のブロックが故障したと判定することで、当該次のブロックにレコードを書き込む前に故障を検知でき、また、更に次のブロックのデータの消去を試み、消去に成功した場合に当該更に次のブロックにレコードをコピーすることで、故障しているブロックへのコピーをスキップすることができる。したがって、故障しているブロックにデータを何回か書き込んだ後に故障を検出するよりも早く、故障しているブロックにデータを書き込む前に、故障を検知できるので、故障したブロックから次のブロックにデータをコピーする必要がなくなる。その結果、ブロックの故障に起因してブロック間のデータのコピー頻度が増大するのを防ぐことができる。一般に、ブロックにデータを書き込むときにフラッシュメモリ5にかける電気的負荷は、ブロックのデータを消去するときにフラッシュメモリ5にかける電気的負荷よりも低い。したがって、ブロックのデータの消去に失敗した場合の方が、データの書き込みに失敗した場合よりも、ブロックが壊れている可能性が高い。逆に言えば、データの書き込みに失敗した場合は、まだそのブロックが壊れておらず、一時的な原因によってそのブロックが書き込み不能になったに過ぎない可能性が高い。そこで、このことを利用して、記録先のブロックにレコードを書き込もうとして失敗したとしても、直ちにそのブロックを故障であると判定せず、そのブロックの他の部分に書き込みをリトライすることで、ブロックを従来よりも有効活用することができる。また、書き込みデータの書き込みに失敗した場合でも、直ちにブロックが故障していると判定してレコードを他のブロックにコピーすることがなく、ブロック間のコピーを行う回数が増加しない。そのため、データ記憶に失敗しても全体の処理時間は増加せず、処理負荷を低減することができる。第2実施形態次に、本発明の第2実施形態について、第1実施形態とは異なる部分を中心に説明する。図6に、本実施形態に係るマイクロコントローラ1の構成を示す。本実施形態のマイクロコントローラ1のハードウェア構成は、第1実施形態と同じである。ただし、本実施形態では、フラッシュメモリ5内の複数個のブロック1~Nが、M個のエリアに区分けされており、各エリア内で、ブロックに順番が割り振られている。どのブロックがどのエリアに属するかの情報は、ブロックと、そのブロックに対応するブロックが属するエリアとの対応関係情報以下、所属先エリアデータというとして、あらかじめ書き込み可能な不揮発性記憶媒体例えば、フラッシュメモリ、EEPROMに記録されており、CPU7は、所属先エリアデータを参照して、どのブロックがどのエリアに属するかを特定する。エリアは、フラッシュメモリ5に書き込むレコードの記録先を、そのレコードが含むデータの種別に応じて仕分けするために設けられた領域である。例えば、ドアの開閉回数、エンジンの開閉回数等の、値が変化する頻度すなわち、更新の頻度が高い種別のデータは、エリア2に記録し、ソフトのバージョン等の、値が変化する頻度が低い種別のデータは、エリア1に記録する等の区分けを行う。どの種別のデータがどのエリアに記録されるかの情報は、データIDとエリアとの対応関係を示すエリア対応テーブルとして、ROM3に記録されている。また、本実施形態のCPU7は、アプリケーションソフトの実行において書き込み要求が出力されたことに基づいて、フラッシュドライバソフトの実行を開始し、その実行処理において、まず、書き込み要求に含まれるデータIDと、上述のエリア対応テーブルに基づいて、この書き込み要求に含まれる書き込みデータの記録先のエリアを特定する。そして、特定した記録先のエリア内のブロックに書き込みデータを記録するため、図3に示す処理に代えて、図7に示す処理を実行する。図7の処理と図3の処理で、同じ符号が付されているステップは、互いに同じ処理を行う。また、複数のエリアのうちの1つまたは複数には、通常時の書き込みに使用するブロック以外に、そのエリア用の予備ブロック設けられている。予備ブロックは、通常のデータ記憶では使用しないブロックであり、ブロックの消去に失敗したときのみ、書き込みに使用するブロックである。予備ブロックを設けるエリアは、頻繁に値が変化するデータを記録するエリア例えばエリア2、3のみとし、値の変化が頻繁でないデータを記録するエリア例えば、エリア2、3に記録するデータよりも値の変化の頻度が低いデータが記録されるエリア1には、予備ブロックを設けないようになっていてもよい。予備ブロックとそうでないブロックの識別方法は例えば、エリアごとに使用できるブロック数が決まっており、エリアに割り当てられているブロックの数が使用できるブロック数1の場合は、1つ予備ブロック例えば最後の順番のブロックを有していると判断する。以下、図7の処理について説明するが、記録先として決定したエリアが、上述の例における、予備ブロックを有するエリア2であった場合を例に取って説明する。まず、ステップ150における、次のブロックを検索し、検索の結果抽出した当該次のブロックのデータを消去する点は、第1実施形態と同じである。また、消去に成功したと判定しステップ160、必要なレコードのコピーを行うと共にヘッダフィールドを書き換えるステップ170部分についても、第1実施形態と同様である。本実施形態が第1実施形態と異なるのは、ステップ160でブロックのデータ消去に失敗し、ステップ175で第1実施形態と同様に当該ブロックの故障があると判定した後の処理である。ステップ175に続いては、ステップ205で、現在の記録対象のエリア内に未使用の予備ブロックがあるか否かを判定する。未使用の予備ブロックとは、当該エリアに属する予備ブロックで、ヘッダフィールドによれば未使用である予備ブロックである。ステップ205で未使用の予備ブロックがあると判定した場合は、続いてステップ210で、当該抽出した予備ブロックを次のブロックとして選択し、当該次のブロック予備ブロックのデータを消去するため、当該次のブロック予備ブロックのデータを消去する消去指令をフラッシュコントローラ6に出力する。これにより、フラッシュコントローラ6は、当該次のブロック予備ブロックのデータの消去を試み、消去に成功すると、消去成功の旨のメッセージをCPU7に出力し、消去に失敗すると、消去失敗の旨のメッセージをCPU7に出力する。その後、処理はステップ160に進む。ステップ160以降は、既に第1実施形態で説明した通りである。例えば、ステップ160で消去に成功したと判定すると、ステップ170に進む。更に、前回の記録先のブロックから、必要なすべてのレコードを読み出し、読み出した各レコードを現在の記録先のブロック予備ブロックに先頭アドレスから順番にコピーする。また、ステップ205で未使用の予備ブロックがないと判定した場合は、エラーメッセージを出力し、図7の処理を終了する。エラーメッセージの出力先は、第1実施形態と同じでもよい。なお、本実施形態では、予備ブロックを有さないエリアを記録先のエリアとする場合は、図7でなく図3の処理を行うようになっていてもよい。以上説明した通り、図7の処理において、CPU7は、次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共にステップ150、消去に成功したか失敗したかを判定しステップ160、消去に失敗したと判定したことに基づいて、次のブロックが故障したと判定しステップ175、同じエリア内で予備ブロックがあればステップ205、その予備ブロックから更に次のブロックを抽出し、抽出した当該更に次のブロック予備ブロックを使用対象ブロック群に含めステップ210、抽出した当該更に次のブロック予備ブロックのデータの消去を試みるステップ150と共に、消去に成功したか失敗したかを判定するステップ160。このように、ブロックが故障したと判定した場合に使用対象ブロック群に含まれない予備のブロックを使用対象ブロック群に含めて用いることで、使用対象ブロック群の数を減らすことなく処理を続けることができ、また、使用回数の少ない予備ブロックを用いることで、より確実に書き込みデータを書き込むことができる。また、記録先のエリア用の使用対象ブロック群の1つを、当該エリア専用の予備ブロックとして用いることで、当該エリアの予備ブロックのストックをより確実に確保することができる。第3実施形態次に、本発明の第3実施形態について、第2実施形態との違いを中心に説明する。本実施形態は、フラッシュメモリ5内の複数個のブロック1~Nが、M個のエリアに区分けされている点は同じであるが、それらエリアのうち1つが、予備ブロック用のエリア以下、予備エリアというとして用いられる点が異なる。どのエリアが予備エリアであるかは、あらかじめROM3に記録された情報に基づいて特定できるようになっている。加えて、予備エリアとは別にエリアごとに予備ブロックを有していても良い。したがって、データIDとエリアとの対応関係を示すエリア対応テーブルにおいては、予備エリアにはどのデータIDも対応付けられていない。これら予備エリアに属する予備ブロックは、後述するように、他のエリアのブロックの代替として用いられることになる。予備エリア中の各予備ブロックをどのエリアの予備ブロックとして使用するかはフラッシュメモリに予備ブロック割り当てテーブルとして書込み管理する。また、マイクロコントローラ1の使用開示時は、各予備ブロックはデータが消去された状態になっており、まだどのエリアのブロックの代替として用いられているかは決まっていない。そして、本実施形態のCPU7は、図7の処理に代えて、図8に示す処理を実行するようになっている。図7と図8で同一の処理については、同じ符号を付す。この図8の処理が第2実施形態と異なるのは、ステップ160で対象のエリアのブロックのデータ消去に失敗し、ステップ175で当該ブロックの故障があると判定した後の処理である。ステップ175に続いては、ステップ215で、予備エリア内に未使用の予備ブロックがあるか否かを判定する。予備エリア内で未使用の予備ブロックとは、予備エリアに属するブロックのうち、ヘッダフィールドによれば未使用である予備ブロックである。ステップ215で未使用の予備ブロックがあると判定した場合は、続いてステップ220で、予備エリアに属する未使用の予備ブロックのうち1つの予備ブロック例えば、最も順番が早い予備ブロックを抽出し、予備ブロック割り当てテーブルにおいて、当該予備ブロックがエリア2に割り当てられている旨を記録する。更にステップ220では、当該抽出した予備ブロックを次のブロックとして選択し、当該次のブロック予備ブロックのデータを消去するため、当該次のブロック予備ブロックのデータを消去する消去指令をフラッシュコントローラ6に出力する。これにより、フラッシュコントローラ6は、当該次のブロック予備ブロックのデータの消去を試み、消去に成功すると、消去成功の旨のメッセージをCPU7に出力し、消去に失敗すると、消去失敗の旨のメッセージをCPU7に出力する。その後、処理はステップ160に進む。ステップ160以降は、既に第2実施形態で説明した通りである。例えば、ステップ160で消去に成功したと判定した場合は、更にステップ170で、前回の記録先のブロックから、必要なレコードを読み出し、読み出した各レコードを現在の記録先のブロック予備ブロックに先頭アドレスから順番にコピーする。また、ステップ215で未使用の予備ブロックがないと判定した場合は、エラーメッセージを出力し、図8の処理を終了する。エラーメッセージの出力先は、第2実施形態と御同じでもよい。以上説明した通り、図8の処理において、CPU7は、次のブロックを抽出し、抽出した次のブロックのデータの消去を試みると共にステップ150、消去に成功したか失敗したかを判定しステップ160、消去に失敗したと判定したことに基づいて、次のブロックが故障したと判定しステップ175、どのエリア用の使用対象ブロック群にも属さない予備エリア内で予備ブロックがあればステップ215、その予備ブロックから更に次のブロックを抽出しステップ220、抽出した当該更に次のブロック予備ブロックのデータの消去を試みるステップ150と共に、消去に成功したか失敗したかを判定するステップ160。なお、CPU7は、記録先のエリアがどのエリアの場合であっても、図8の処理を実行する。したがって、予備エリアの予備ブロックは、どのエリアのブロックの代替のブロックとしても使用可能である。あるいは、特定の複数のエリアのいずれかが記録先である場合に限り、図8の処理を行い、特定の複数のエリア以外のエリアが記録先である場合は、図3の処理を行うようになっていてもよい。この場合でも、予備エリアの予備ブロックは、特定の複数のエリアうち、どのエリアのブロックの代替のブロックとしても使用可能である。このように、ブロックが故障したと判定した場合に使用対象ブロック群に含まれない予備のブロックを使用対象ブロック群に含めて用いることで、使用対象ブロック群の数を減らすことなく処理を続けることができ、また、使用回数の少ない予備ブロックを用いることで、より確実に書き込みデータを書き込むことができる。また、どのエリアのブロックの予備としても用いることができる予備ブロックを有することで、予備ブロックの汎用性が増す。なお、本実施形態では、予備エリア以外のエリアが、予備ブロックを含んでいてもよいし、含んでいなくてもよい。第4実施形態次に、本発明の第4実施形態について、第3実施形態と異なる部分を説明する。本実施形態が第3実施形態と異なるのは、CPU7が、図8に示した処理に代えて、図9に示す処理を実行する場合がある点である。また、本実施形態では、予備エリア以外のすべてのエリアのうち、記録するデータの更新頻度すなわち、レコードが書き込まれる頻度が最も少ないエリアのエリアIDが、交換対象エリアIDとしてあらかじめROM3に記録されている点も、第3実施形態とは異なる。マイクロコントローラ1の設計時には、どの種別のデータがどの程度の更新頻度であるかが概ねわかっているので、予備エリア以外のエリアのうち、どのエリアが一番データの更新頻度が低いかが判っており、設計者は、そのエリアのエリアIDを交換対象エリアIDとしてROM3に記録しておく。なお、記録するデータの更新頻度が最も少ないエリアが含むブロック数は、更新頻度が少ない故、他のエリアよりも少なく、例えば2個程度である。記録するデータの更新頻度が最も少ないエリアは、本実施形態では、マイクロコントローラ1が実行するソフトウェアのバージョン等のデータが記録されるエリア1とする。以下、図9の処理について説明する。CPU7は、上述の交換対象エリアIDの示すエリア1以外のエリア以下、エリア2とするを記録対象として特定した場合、図8の処理に代えて、図9の処理を実行するようになっている。図9の処理内容が第3実施形態の図8の処理と異なるのは、図8のステップ215、220の処理を、図9のステップ235、240の処理に置き換えたことである。ステップ175に続くステップ235では、交換対象エリアIDが示すエリア1以下交換対象エリアというからブロックを検索して抽出する。抽出するブロックは、当該交換対象エリア1に属するブロックのうち、ヘッダフィールドによれば使用中であるブロックとする。このように、当該交換対象エリア1が属するブロックのうち、現在の記録対象となっているブロックを選ぶのは、そのブロックにはレコードの順次書き込みが行われている途中なので、交換対象エリア中で最も故障の可能性が低いブロックだからである。更にステップ235では、所属先エリアデータにおいて、当該抽出したブロックの所属先のエリアをエリア2に書き換え、また、直前のステップ160で消去に失敗したブロックの所属先のエリアを交換対象エリアに書き換える。これにより、当該抽出したブロックを当該交換対象エリア1の使用対象のブロック群から除外して現在の記録先エリア2の使用対象のブロック群に組み入れ、また、直前のステップ160で消去に失敗したブロックを現在の記録先エリア2の使用対象のブロック群から除外して、当該交換対象エリア1の使用対象のブロック群に組み入れる。これにより、交換対象エリア1と現在の記録先エリア2との間で、ブロックの交換が行われたことになる。続いてステップ240では、抽出したブロックに現在記録されているレコードのうち、有効なレコードのすべてを、直前のステップ175で故障と判定したブロックにコピーする。このようにするのは、故障したと判定したブロックでも、完全に故障しているのではなく、書き込み可能な領域が少しは残っている可能性があり、抽出したブロックすなわち、記録するデータの更新頻度が最も少ないエリアのブロック中のレコードは、更新の頻度が少ないので、そのような少しの領域でも充分使用可能である可能性が高いからである。このため、コピーの際は、レコードの書き込みに失敗した場合は、ステップ120、130の書き込み処理と同様に、書き込みが成功するまで、記録先のアドレスをスキップしながら、書き込みをリトライする。ステップ230に続いては、ステップ150に戻る。それ以降は、第3実施形態と同じである。このように、現在の記録先のエリア2用の使用対象ブロック群に属するブロックの故障を検出した場合、更新頻度が最も低いとあらかじめ定められた交換対象エリアに属するブロックを記録先のエリア2用の使用対象ブロック群に含め、さらに、その故障ブロックを、更新頻度の最も低い交換対象エリア用の使用対象ブロック群に含めることで、更新頻度が高いデータは故障の可能性が低く、かつ書き込み回数や消去回数が低いブロックに記録することができ、他方、更新頻度が低いが故に必要な記憶領域が比較的小さいデータは、故障したと判定したブロックに記録することで、効率的なブロックの使用が実現する。なお、本実施形態では、予備エリア、予備ブロックがなくてもよい。なお、上記実施形態において、CPU7が、ステップ110を実行することで満杯状態判定手段の一例として機能し、ステップ120、130、140を実行することで書き込み処理手段の一例として機能し、ステップ150、160、175、180、205、210、215、220、225、230、235、240を実行することで消去判定手段の一例として機能し、ステップ170を実行することで有効データコピー手段の一例として機能する。他の実施形態以上、本発明の実施形態について説明したが、本発明の範囲は、上記実施形態のみに限定されるものではなく、本発明の各発明特定事項の機能を実現し得る種々の形態を包含するものである。例えば、上記の実施形態において、CPU7がプログラムを実行することで実現している各機能は、それらの機能を有するハードウェア例えば回路構成をプログラムすることが可能なFPGAを用いて実現するようになっていてもよい。また、上記実施形態では、フラッシュコントローラ6とCPU7とは分離した装置となっているが、単一のICが、フラッシュコントローラ6とCPU7の機能を実現するようになっていてもよい。また、上記実施形態では、1つのマイクロコントローラ1の中にI/O2、ROM3、RAM4、フラッシュメモリ5、フラッシュコントローラ6が記録されているが、フラッシュメモリ5は、マイクロコントローラ1の外部に設けられていてもよい。すなわち、本発明の制御装置は、フラッシュメモリを備えていてもよいし、備えていなくてもよい。また、上記実施形態では、本発明の制御装置の例として、車載用途のマイクロコントローラ1を示したが、本発明の制御装置は、車載用途に限らず、他の用途に応用可能である。