アプリケーションプログラムの変数をフラッシュメモリにバックアップデータとしてセーブさせる情報処理装置において、前記変数は変数データと変数IDとを含み、前記変数データのRAM上の位置と、前記フラッシュメモリ上のセーブ位置との対応関係を記憶した変数ディレクトリを、変数IDをつけてRAM上に構築する手段と、あらかじめ設定したセーブ条件にもとづき、前記変数データと前記変数IDとをセーブする情報として、前記フラッシュメモリ上の新たなセーブ位置にセーブする手段と、を備え、前記フラッシュメモリは、シーケンシャルにデータが書き込まれるものであり、データが書き込まれている書き込みセクタとデータが書き込まれていない非書き込みセクタとからなる複数のセクタで構成され、最後尾の書き込みセクタから連続する非書き込みセクタが少なくとも二つ以上無いとき、前記最後尾の書き込みセクタに連続する二つ以上のセクタが非書き込みセクタとなるようにデータ消去処理を行って、前記非書き込みセクタに設定する手段を備えることを特徴とする情報処理装置。前記変数を前記フラッシュメモリにバックアップデータとしてセーブする際に、前記変数データがデフォルト値を維持し続けていることを検出すると、前記変数をバックアップデータとしてセーブしない手段を備えた請求項1に記載の情報処理装置。アプリケーションプログラムの起動時において、フラッシュメモリをスキャンして前記変数ディレクトリを再構築する手段を備えた請求項1または請求項2に記載の情報処理装置。前記フラッシュメモリのセクタをグループ化し、前記セーブ手段は、前記変数の種類に応じてセーブするグループを決める請求項1~請求項3のいずれかに記載の情報処理装置。前記フラッシュメモリは、消去対象となったセクタ内に前記変数ディレクトリで参照されるデータがあるときに、該データをフラッシュメモリ上の新たなセーブ位置に移す手段を備えた請求項1~請求項4のいずれかに記載の情報処理装置。前記フラッシュメモリは、セクタを消去する場合には、電源電圧が低下した時に優先してセーブするように予め設定したデータを、フラッシュメモリ上の新たなセーブ位置に、セクタを消去する前にセーブする手段を備えた請求項1~請求項5のいずれかに記載の情報処理装置。コンピュータによって実行されるアプリケーションプログラムが使用する変数をフラッシュメモリにバックアップデータとしてセーブする手段として前記コンピュータを機能させるためのプログラムであって、前記変数は変数データと変数IDとを含み、前記プログラムは、前記変数データのRAM上の位置とフラッシュメモリ上のセーブ位置との対応関係を記憶した変数ディレクトリを、変数IDをつけてRAM上に構築する手段と、あらかじめ設定したセーブ条件に基づいて、前記変数データと前記変数IDとを、セーブする情報としてフラッシュメモリ上の新たなセーブ位置に、前記アプリケーションプログラムとは非同期にセーブするセーブ手段、として前記コンピュータを機能させるプログラムであって、シーケンシャルにデータが書き込まれ、データが書き込まれている書き込みセクタとデータが書き込まれていない非書き込みセクタとからなる複数のセクタで構成される前記フラッシュメモリに対して、最後尾の書き込みセクタから連続する非書き込みセクタが少なくとも二つ以上無いとき、前記最後尾の書き込みセクタに連続する二つ以上のセクタが非書き込みセクタとなるようにデータ消去処理を行って、前記非書き込みセクタに設定する手段を前記コンピュータに機能させるプログラム。前記変数を前記フラッシュメモリにバックアップデータとしてセーブする際に、前記変数データがデフォルト値を維持し続けていることを検出すると、前記変数をバックアップデータとしてセーブしない手段を前記コンピュータに機能させる請求項7に記載のプログラム。アプリケーションプログラムの起動時に、フラッシュメモリをスキャンして前記変数ディレクトリを再構築する手段を前記コンピュータに機能させる請求項7または請求項8に記載のプログラム。前記フラッシュメモリのセクタをグループ化し、前記セーブ手段によって、前記変数の種類に応じてセーブするグループを決めることを、前記コンピュータに機能させる請求項7~請求項9のいずれかに記載のプログラム。前記フラッシュメモリに対して、消去対象となったセクタ内に前記変数ディレクトリで参照されるデータがあるときに、該データをフラッシュメモリ上の新たなセーブ位置に移す手段を前記コンピュータに機能させる請求項7~請求項10のいずれかに記載のプログラム。前記フラッシュメモリに対して、セクタを消去する場合に、電源電圧が低下した時に優先してセーブするように予め設定したデータを、フラッシュメモリ上の新たなセーブ位置に、セクタを消去する前にセーブする手段を前記コンピュータに機能させる請求項7~請求項11のいずれかに記載のプログラム。情報処理装置におけるフラッシュメモリを用いたバックアップ処理において、アドレス形式のバックアップ処理は、バックアップのインフラとして共通化したり再利用したりできず、システム設計者にとって、作業負担が重い場合が多いという問題があった。この問題を解決するために本発明では、データの読み込み時間と書き込み時間が短いアドレス形式のデータ管理でありながら、システム設計者が容易にバックアップ処理をアプリケーションに導入でき、フラッシュメモリの書き込み効率がよく、バックアップ処理の頑健性も高い、情報処理装置またはプログラムを提供することを目的とする。また、本発明は、データを移行する局面での電源断があったとしても、エラーデータの読み込みを防ぐことを目的とする。本発明は、アプリケーションプログラムの変数をフラッシュメモリにバックアップデータとしてセーブさせる情報処理装置において、変数は変数データと変数IDとを含み、変数データのRAM上の位置とフラッシュメモリ上のセーブ位置との対応関係を記憶した変数ディレクトリを、変数IDをつけてRAM上に構築する手段と、あらかじめ設定したセーブ条件にもとづき、変数データと変数IDとをセーブする情報として、フラッシュメモリ上の新たなセーブ位置にセーブする手段と、を備え、フラッシュメモリは、シーケンシャルにデータが書き込まれるものであり、データが書き込まれている書き込みセクタとデータが書き込まれていない非書き込みセクタとからなる複数のセクタで構成され、最後尾の書き込みセクタから連続する非書き込みセクタが少なくとも二つ以上無いとき、最後尾の書き込みセクタに連続する二つ以上のセクタが非書き込みセクタとなるようにデータ消去処理を行って、非書き込みセクタに設定する手段を備えることを特徴とする。また、本発明は、変数をフラッシュメモリにバックアップデータとしてセーブする際に、変数データがデフォルト値を維持し続けていることを検出すると、変数をバックアップデータとしてセーブしない手段を備えたことを特徴としている。また、本発明は、アプリケーションプログラムの起動時において、フラッシュメモリをスキャンして変数ディレクトリを再構築する手段を備えたことを特徴としている。また、本発明は、フラッシュメモリのセクタをグループ化し、セーブ手段は、変数の種類に応じてセーブするグループを決めることを特徴としている。また、本発明では、フラッシュメモリは、消去対象となったセクタ内に変数ディレクトリで参照されるデータがあるときに、該データをフラッシュメモリ上の新たなセーブ位置に移す手段を備えたことを特徴としている。また、本発明では、フラッシュメモリは、セクタを消去する場合には、電源電圧が低下した時に優先してセーブするように予め設定したデータを、フラッシュメモリ上の新たなセーブ位置に、セクタを消去する前にセーブする手段を備えたことを特徴としている。以下、本発明でのバックアップ処理を図3のデータ構造を参照して説明する。本発明のバックアップ処理においては、バックアップする変数データ10のRAM100上の位置と、フラッシュメモリ101上のセーブ位置との対応関係を変数IDをつけてRAM100上に変数ディレクトリ2として記憶する手段と、あらかじめ設定したセーブ条件にもとづき、前記変数データ10と前記変数IDとをセーブする情報として、新たなセーブ位置にセーブする手段とを備え一つのアプリケーション変数10には、一つの変数IDを配する。このようにアプリケーション変数のRAM100上の位置以下RAMアドレスという。と、フラッシュメモリ101上のセーブ位置以下フラッシュアドレスという。とを記憶した変数ディレクトリ2というデータベースをRAM100上に設置し、その変数データ10と変数IDとを一つのセットとし、フラッシュメモリ101にバックアップする。変数ディレクトリ2上には、バックアップデータの様々な情報を記憶する領域以下、フィールドという。を配し、RAMアドレスをRAMアドレスフィールド22に記憶し、フラッシュアドレスをフラッシュアドレスフィールド23に記憶し、変数IDを変数IDフィールド21に記憶する。このように一つの変数IDに対し、複数の情報を記憶するフィールドの組20を一つ配しておく。さらに、フラッシュアドレス101上に、バックアップデータに関する記憶領域以下、エレメントという。4を配し、エレメント4の中にバックアップデータ16とそのバックアップデータに関する情報を記憶し以下、この情報を記憶した領域30をヘッダという。、このエレメント4を書き込みの単位としてフラッシュメモリ101にデータを書き込む。バックアッププログラムは、変数データ10や、バックアップデータ16などを監視し、規定のバックアップ条件が満たされた場合には、RAM100上の変数データ10をフラッシュメモリ101上の新たなアドレスに新たなエレメント4として記憶し、変数IDヘッダ31に変数IDを記述する。また、その際には変数ディレクトリ2上のフラッシュアドレスフィールド23を移動した先の新しいフラッシュアドレスの値に更新する。本発明のバックアップ処理において、あるアプリケーション変数が配列変数18である場合には、その配列変数18に一つの変数IDを配し、その配列変数18の一つの要素19には一つの指数以下、配列インデックスという。を配し、配列要素19ごとにフラッシュメモリ101にエレメント4として記憶する。また、この配列変数18の変数ディレクトリ2には、各配列要素19の配列インデックスとフラッシュアドレスとを対応付けて記憶しておくテーブル以下、配列テーブルという。9を設ける。配列テーブル9上には、フィールドを配し、配列インデックスは配列インデックスフィールド14に記憶し、配列要素のフラッシュアドレスは配列要素フラッシュアドレスフィールド15に記憶する。また、フラッシュメモリ101上の一つのエレメント4には、各配列要素19をバックアップデータ16として記憶するとともに、配列変数18の変数IDを変数IDヘッダ31に記憶し、配列要素19の配列インデックスを配列インデックスヘッダ32に一つのエレメント4としてバックアップする。規定のバックアップ条件が満たされた場合には、フラッシュメモリ101上の新たなアドレスに、RAM100上の配列要素のデータ19を新たなエレメント4として記憶し、変数IDと配列インデックスとを記憶する。また、配列要素フラッシュアドレスフィールド15を移動した先の新しいフラッシュアドレスに更新する。本発明における変数ディレクトリ2の再構築は、アプリケーションプログラムの起動時に、フラッシュメモリ101内にバックアップされていたバックアップデータ16をもとに行う。フラッシュメモリ101の先頭のセクタからシーケンシャルにフラッシュメモリ101を読み込んでいくと同時に、変数IDごとに変数ディレクトリ2を構築する。この際に、同じ変数IDのエレメント4があれば、その変数IDの変数ディレクトリ2及び変数データ10の内容は上書き処理される。フラッシュメモリ101にはシーケンシャルに新しいエレメントを記憶していくため、この上書き処理により変数ディレクトリ2及び変数データ10の内容は最新のバックアップデータ16と同期する。この変数ディレクトリ2の再構築は一度フラッシュメモリ101全体に対して行い、次にシーケンシャルに並んだ先頭のセクタから、次に書き込みを行うアドレスまで行う。また、本発明では前記フラッシュメモリ101のセーブ領域をグループ化する。変数データ10を種類に応じてグループに分け、設定されたグループの数に従い、バックアップ処理を並列的に実行する。また、本発明におけるフラッシュメモリ101のセクタ消去は、書き込みを行うアドレスが新しいセクタに移動するときに、一番古くに書き込みが行われたセクタに対して行う。エレメント4には、そのエレメント4を消去するかを判定するためのアクティブフラグを用意し、そのアクティブフラグを記憶するアクティブフラグフィールド24を変数ディレクトリ2上に配し、活性化したフラグを持つ変数IDであって消去セクタ上に最新のバックアップデータがある場合には、そのエレメント4を新たなセクタへと複写する。消去セクタ上の消してはいけないエレメント4を全て移動させた後にセクタ消去を行う。また、本発明では、システムのハードウェアに電源電圧の低下以下、パワーフェイルという。が起こったときに、優先してバックアップするデータ以下、パワーフェイルデータという。が設定されている場合、セクタ消去が実行される前の段階で毎回必ずパワーフェイルデータのバックアップを行う。本発明によれば、アドレス形式のデータ管理でありながらも異なるアプリケーションやハードウェアに共通に利用可能で、システム設計者が容易にバックアップをアプリケーションプログラムに導入でき、再利用も容易なバックアップ方式を提供できる。また本発明によれば、変数ディレクトリを用いることで、アプリケーションプログラムの設計者は、バックアップ処理におけるフラッシュメモリのアドレス管理を、変数IDを介した管理にルーチン化することができ、作業負担の減少をさせることができる。また本発明によれば、配列要素を個別にバックアップ処理することにより、配列変数全体をバックアップ処理する場合に比べてデータ書き換え量を抑制でき、フラッシュメモリの長寿化が実現できる。また、本発明の変数ディレクトリ再構築手段によれば、最新のデータを判定する必要がなく、また特別な判別フラグも必要としないため、簡易なデータ構造で再構築が行うことができる。また、本発明のセクタグループ化手段によれば、データの重要度に応じて、データバックアップの頻度をそろえ、効率的なセクタ利用と調寿命化を実現することができる。また、本発明のセクタ消去手段によれば、セクタ消去はセクタ3に書き込み可能な領域がなくなったときにのみ行われる。そのために、セクタ消去はデータ書き込み量にのみ依存させることができ。非常に小さいセクタ消去頻度を実現できる。また、本発明のパワーフェイルデータのバックアップ手段によれば、フラッシュメモリのセクタ消去中にパワーフェイルが起こった場合でも、確実にパワーフェイルデータをバックアップすることができる。図1は本発明の実施形態例であるフラッシュメモリと変数ディレクトリとRAM上の変数データとを配した情報処理装置の構成図であり、図3は、一つの変数IDに対応した変数ディレクトリと、エレメントとの概観図である。情報処理装置202は、アプリケーションプログラムのバックアップ以外の処理を行うアプリケーションモジュール200とバックアップ処理を行うバックアップモジュール201とで構成されていて、中央演算回路5にフラッシュメモリ101、RAM100、入力デバイス6および出力デバイス7が接続されている。アプリケーションモジュール200には、RAM100上にアプリケーション変数のデータを変数データリスト1として配する。バックアップモジュール201には、変数ディレクトリ2上に、一つの変数IDごとに複数の情報を記憶させておくフィールドの組20を配する。フィールドとしてはRAMアドレスを記憶するRAMアドレスフィールド22および、フラッシュアドレスを記憶するフラッシュアドレスフィールド23、変数IDを記憶する変数IDフィールド21、セクタ消去の際に新たなセクタ3に移動するかを判定するアクティブフラグフィールド24などを用いる。また、フラッシュメモリ101のエレメント4上には、バックアップデータ16とともに複数の情報を記憶させておくヘッダの組30を配する。ヘッダとしては、変数IDを記憶する変数IDヘッダ31や、配列インデックスを記憶させておく配列インデックスヘッダ32、データサイズを示すサイズヘッダ34、などを用いる。また、この実施形態では、以降で示すさまざまな処理のために複数のフィールドやヘッダを用いている。変数データが配列変数かどうかを記述するタイプフィールド42、配列変数の場合に配列数を記述する配列数フィールド25、単体の変数の場合には変数のビットサイズを記述しておき、配列変数の場合には要素のビットサイズを記述しておくサイズフィールド43、変数データを登録および復帰させる場合にそのバックアップデータを復帰させるかをアプリケーションモジュールにより登録される登録フラグフィールド27、セクタ消去時にも消去することなく保存を続けるべきバックアップデータを登録するパーマネントフラグフィールド28、バックアップ条件の種類を記述しておく条件フィールド26などが用いられる。なお、変数ディレクトリ2上に、クリティカルフラグフィールド44を設け、変数データ10を読み出す時のアクセス方式が割り込み禁止によるアクセスかどうかを判定し、割り込み禁止機能を実現することもできる。また、バックアップデータが保存されているセクタ3の番号を記憶しておく新セクタフィールド45、ひとつ前のバックアップデータが保存されているセクタ3の番号を記憶しておく旧セクタフィールド46、ひとつ前のバックアップデータが保存されているエレメント4のアドレスを記憶しておく旧フラッシュアドレスフィールド47、バックアップデータがエラーを含んでいる場合にエラーを記述しておくエラーフラグフィールド48などを記憶させておいて、一つ前のバックアップデータの特定や、変数データの特定、変数データの変更検知などに用いてもよい。また、条件フィールド26より指定されるバックアップ条件の種類としては、アプリケーションから指定されるタイミングをコマンドフィールド41に記憶し実行される場合や、あらかじめ周期フィールド40に記憶されたタイミングで実行される場合や、カウンタフィールド29でのカウントに基づいて実行される場合などのタイミングで実行することができる。また、バックアップを行う条件として、RAMアドレスとフラッシュアドレスとが指定するそれぞれのデータをアプリケーションモジュール200で監視し、データの内容に変更が行われた場合には変数データ10をバックアップするという条件を加えてもよい。以上のような様々な条件に従いRAMアドレスの指定する変数データ10と、変数ディレクトリ2や配列テーブル9に保存されている情報とを、新たなエレメント4としてフラッシュメモリ101上のアドレスにバックアップする。以上のようにアプリケーションプログラム実行時には、変数データリスト1上のある変数データ10に対して、アプリケーションによる読み出しあるいは変更が行われる。また、その変数IDの変数ディレクトリ2では、RAMアドレスフィールド22に記憶したRAMアドレスをもとに変数データリスト1上の変数データ10を参照し、フラッシュアドレスフィールド23をもとにエレメント4上のバックアップデータ16のアドレスを得る。そして、あらかじめ設定したバックアップ条件に従い、前期変数データ10をフラッシュメモリ101上の新たなアドレスに記憶する。その際バックアップモジュール201はアプリケーションモジュール200の通常時の処理とは切り離し実行する。また、配列変数の場合、各配列要素を一つのエレメント4として新たなフラッシュアドレスにバックアップする。変数ディレクトリ2に保存されたあるひとつの変数IDが示すデータが配列変数18である場合、変数ディレクトリ2上のフラッシュアドレスフィールド23は、RAM100上に別途設置された配列テーブル9のRAMアドレスを記憶し、変数ディレクトリ2上に配列数フィールド25を設ける。配列テーブル9では、それぞれの配列要素19を区別する配列インデックスとそれぞれの配列要素19のフラッシュアドレス上でのアドレスとを対応付ける。このようにフラッシュメモリ101上での配列要素19のアドレス管理を一つ一つ行うことにより、たとえば配列変数18のひとつの要素19のみにデータの変更が起こった場合に、配列全体18をバックアップデータ16としてバックアップ処理するのではなく、その配列要素19のみをバックアップデータ16としてバックアップ処理することができる。なお、変数ディレクトリ2上のRAMアドレスフィールド22が指定するRAMアドレスと配列要素19のデータサイズとから各配列要素のRAM100上のデータ19を特定することができる。なお、この例においては配列変数18に変数IDを附してバックアップ処理を行うが、配列要素19に変数IDを附してバックアップ処理を行ってもよい。次に、フラッシュメモリ101内へのデータの複写方法を図2で表す。一つのエレメント4ごとに、ひとつのバックアップデータ16と、そのバックアップデータに対応した情報をヘッダ30として記憶している。まず変数データ10の保存はフラッシュメモリ101の先頭のセクタ3の先頭アドレスからシーケンシャルに行う。図2aのように、書き込みが行われているセクタ3に書き込み予定のデータのサイズよりも大きい空き領域がある場合には、空き領域にデータを書き込む。一方、図2bのように、データサイズ分の空き領域がない場合には、次のセクタ領域を新たな書き込みを行うセクタ領域とする。新たなセクタに書き込み領域が移る際には、フラッシュメモリ101の先頭セクタからシーケンシャルにフラッシュメモリ101上の空きセクタ領域を検索する。その結果、フラッシュメモリ101の書き込みを行っていたセクタ3から規定数先までのセクタ領域が空き領域でなければ、もっとも前に書き込んだセクタを消去する。消去の際には消去対象のセクタ3に含まれるエレメント4すべてを一度に消去する。図2cのように規定数先のセクタ領域から、消さずに保存しておくべきエレメント4を新しいセクタに複写した後、消去セクタのデータを消去する。これにより、フラッシュメモリ101上には規定数の連続してデータ消去されたセクタ領域と、連続して書き込まれているセクタ領域とが常に存在する。また、フラッシュメモリ101の最後尾のセクタまで消去され、新たにセクタ消去を行う必要がある場合には、フラッシュメモリ先頭のセクタ領域を消去する。すると、このフラッシュメモリ101の書き込み領域と非書き込み領域は、常に円環状に循環し、循環して連続な書き込み領域の先頭のセクタには最も古い変数データがバックアップされ、循環して連続な書き込み領域の最後尾のセクタの、最後尾のアドレスに、バックアップするエレメント4を書き込む。セクタ消去時に、一定の条件を満たすエレメント4は新しいセクタ3に移動させる。このエレメント4は、アプリケーションが使用していてバックアップを行うように登録されたエレメント4のみではなく、消去せずにフラッシュメモリ101上に常に残すように登録されたバックアップデータのエレメント4も含む。エレメント4にはそのエレメントが変数ディレクトリ2に登録されているという情報を記憶しておく登録フラグフィールド27と、消去せずに常に残しておくという情報を記憶しておくパーマネントフラグフィールド28とが配されており、フラッシュメモリ101上のエレメント4にはパーマネントフラグを記憶する属性フラグチェックサムヘッダ35が配され、パーマネントフラグの状態をフラッシュメモリ101のバックアップデータ上にも保存される。登録フラグがONの変数とパーマネントフラグがONの変数は、セクタ消去の際に消去されずに新しいセクタ3に移動する。次に、バックアップ処理を行うタイミングについて述べる。バックアップを定期的に行う場合には、アプリケーションからバックアップモジュール201を、何らかの形で自動的に繰り返し呼び出す。バックアップモジュール201側で、変数ディレクトリ2に条件フィールド26を配し、時間をカウントして定期処理を行う場合に用いられる周期フィールド40やカウンタフィールド29などを配した構成にして時間計測を行い、アプリケーションによってあらかじめ登録された周期に達した場合にバックアップ処理を行う。また、変数データ10に変更が加わるたびにバックアップ処理を行いたい場合には、変数ディレクトリ2のRAMアドレスフィールド22の指し示す変数データ10とフラッシュアドレスフィールド23の指し示すバックアップデータ16を逐次比較し、2つの値が異なる場合に、バックアップ処理を行う。また、アプリケーション側で任意にバックアップ処理を行うタイミングを指定する場合には、変数ディレクトリ2に、同時にコマンドフィールド41を配し、アプリケーションからの指示を保存する。このコマンドフィールド41を監視し、バックアップが指示されるとバックアップを行う。ここで図4に条件別バックアップ実施例の処理フローを示す。複数のアプリケーションデータに対してそれぞれ異なるタイミングで条件付けてバックアップ処理を行う。バックアップ処理に演算回路の処理が渡された場合に変数ディレクトリ2に登録されているすべての変数IDに対して、以下の処理が行われる。まずステップ1においてコマンドフィールド41にアプリケーションからのバックアップ指示の設定がされているかを判定し、バックアップ指示の設定を与えられている変数である場合には、ステップ9においてバックアップ処理が行われる。また、バックアップ指示の設定がない場合においても、ステップ2において条件フィールド26を読み込み、バックアップが変数変化時に行うように設定されている場合には、ステップ3において、変数がデフォルト値を維持し続けているならばバックアップ処理を行わない。またそうでない場合はステップ4において変数に変化が起きているかを、変数ディレクトリ2のRAMアドレスフィールド22の指定する値とフラッシュアドレスフィールド23の指定する値とを比較することで検知する。変化がない場合にはバックアップを行わないが、変化があった場合においても、ステップ5においてさらに、変化している状態が数ターン維持されていることを条件に加えて、その条件を満たした後バックアップ処理がステップ10で行う。また、バックアップ条件が変数変化時ではない場合においても、ステップ6において条件フィールド26を読み込み、定期的にバックアップ処理を行うように設定されていれば定期バックアップ処理を行う。ステップ7において、定期時間かどうかを判定し、定期時間であればステップ8の処理を行う。ステップ8では、変数がデフォルト値を維持し続けているかを判定する。そして、維持し続けていない場合にはバックアップ処理を行う。ステップ3とステップ8とにおいて、変数がデフォルト値を維持し続けているならばバックアップ処理を行わないように設定する。変数が宣言された当初から、規定値を維持し続けている場合には、バックアップを行う必要がなく、この条件を判定することでバックアップ処理の量を抑制できる。たとえば変数の宣言時には全ての変数を0に設定すれば過去のバックアップデータがない変数データで値が0のデータはバックアップを省くことができる。ステップ5においてさらに、変化している状態が数ターン維持されていることを条件に加える場合には、アプリケーション設計者がバックアップの条件として任意に時間を設定する。また、条件フィールド26にバックアップ条件が記述されていないデータはバックアップ処理されない。次に、アプリケーションの起動時のアプリケーション変数への値の回復処理について説明する。アプリケーションの起動時には、バックアップデータ16から変数ディレクトリ2を再構築するとともに、変数データリスト1を再編成する。変数ディレクトリ2を構築した後、アプリケーションが指定する再使用したいデータの変数IDのバックアップデータ16が、変数データリスト1に読み込まれるとともに、バックアップを取る変数IDが指定され変数ディレクトリ2の登録フラグフィールド27に登録される。通常、フラッシュメモリ101上には、循環して連続な書き込み済みセクタ領域と、同様に連続な非書き込みセクタ領域とが設置される。また、書き込み済みセクタ領域には、同一変数IDのバックアップデータが複数回書き込まれている。データはシーケンシャルに並び、連続して書き込まれた領域のもっとも先頭のデータが最も古くに書き込まれたデータで、そこから時間順に記憶されている。そのため、最も新しいデータは、同一変数IDのエレメントのうち、最も後方のエレメントに位置する。変数ディレクトリ2の再構築の際には、まず、フラッシュメモリ101の先頭セクタの先頭アドレスから最後尾セクタの最後尾アドレスまで、すべてのバックアップデータ16をシーケンシャルに変数ディレクトリ2へと書き込む。同時に、シーケンシャルに並んだエレメントのうち最も後方のエレメントの位置を検索しておき、再び先頭セクタから検索したエレメントまでの再書き込みを行う。これにより、常に最も新しいデータで変数ディレクトリ2の変数IDが上書き処理される。この変数ディレクトリ2の再構築により、フラッシュアドレス101にバックアップされたデータと変数ディレクトリ2とを整合させる。その後、さらにアプリケーションの変数データリスト1との整合をとったり、バックアップ処理条件の登録を受けたりしてもよい。次に、アプリケーション側から見た場合のバックアップ実行のための手続きを図5で示す。ステップ30のアプリケーションからのバックアップモジュール起動処理により、ステップ20のバックアップ処理が起動する。バックアップ処理が起動すると、ステップ21で前述の変数ディレクトリ2の再構築を行う。このときに同時にアプリケーションプログラムによって変数のバックアップ条件の情報がステップ31において登録される。このときに登録される変数の変数IDが、変数ディレクトリ2にすでにある場合には、その変数を登録し登録フラグをONにするとともに、バックアップデータの値が変数ディレクトリ2内の変数アドレスが示すRAMアドレスに書かれアプリケーションの変数データ10として用いられる。また、変数ディレクトリ2に存在しない変数IDの場合には変数ディレクトリ2に新たな変数IDを持つデータとして登録されるステップ22。以降、内部処理が渡されると、ステップ23のバックアップ処理を行う。内部処理の引渡しは、アプリケーションプログラムのサブルーチンの形式でもよく、スケジューラ等によって内部処理が引き渡されるバックグラウンド処理の形式でもよい。アプリケーションプログラムからのバックアップ処理の呼び出しは、通常は以上の起動と登録との手順のみであるが、登録された設定のバックアップ条件以外の条件でバックアップを行いたいときに用いるステップ32のバックアップ指示と、ステップ33のバックアップ設定の変更を行うための再設定とは、随意に呼び出すことができる。このように、アプリケーションプログラムからの呼び出しは起動と登録のみでバックアップを実行する。このような構成にすることで、アプリケーションの変更があった場合にも、消去したくないデータと変数IDを残すことができる。アプリケーション起動時の変数IDの登録以外、アプリケーションへの依存がないために、アプリケーションに何らかの変更が行われた場合において、新しい変数に対しては新しい変数IDを登録させることで対応し、変更に対する冗長性を高くすることができる。次に、終了処理以外での電源断が発生し、フラッシュデータの書き込みエラーが起こったとしても、エラーデータを読み込むことなく、代替となる過去のデータを自動的に読み込んで対応する例を示す。バックアップモジュール201が起動している場合であって、何らかのデータが書き込まれている途中で電源断が発生した場合には、記述された変数IDに対応するデータがエラーデータとなっている場合がある。再起動時にそのようなエラーデータを誤って変数ディレクトリ2に読み込んで再構築することを避け、エラーデータを読み込まずに、エラーデータ以前にバックアップ処理されたバックアップデータを読み込む。変数ディレクトリ2の再構築は、シーケンシャルな上書き処理により行われていたため、エラーデータの判別ができれば、それを変数ディレクトリ2に読み込まないことで自動的にエラーの起こっていない最新のバックアップデータからシステムを復旧することができる。このために、エレメント4に通常のバックアップデータ16と同時にデータサイズを記憶しておくサイズヘッダ34および、属性フラグおよびチェックサムを記憶しておく属性フラグチェックサムヘッダ35、を用意することで対応可能となる。バックアップデータの記述に際して、エレメント4内にデータサイズ、バックアップデータ、属性フラグおよびチェックサムの順番で記述する。このような順番で記述することにより、属性フラグおよびチェックサムを記述する前の電源断による書き込みエラーの発生に対しては、属性フラグおよびチェックサムが正しく書き込まれない。そのため、属性フラグおよびチェックサムが正しく書き込まれていないエレメント4には、書き込み途中でエラーが発生したことが検知でき、エラーデータを読みこまないようにすることができる。また、複数の変数間に、常に同期が取られている必要がある場合、ある変数データ10が正常にバックアップされても、同時に同期すべき別の変数のバックアップ処理前に電源断等でバックアップが中断された場合にはそれを検知し、同期が取れている過去の状態に設定しなおす必要がある。この同期処理は、フラッシュメモリ101内に同期フラグエレメントと終端同期フラグエレメントを備えることで対応可能となる。同期フラグエレメントと終端同期フラグエレメントには、たとえば、固有の変数IDを割り当てておき同期フラグエレメントであるということを判定可能にしておく。また、データとして同期させるグループのメンバの変数IDを記述しておく。また、同期フラグエレメントと対になるエレメントとして、終端同期フラグエレメントもあわせて記述する。ここでこの同期すべき変数グループのメンバをバックアップ処理する場合には、必ず、同期フラグエレメントと終端同期フラグエレメントとで前記メンバをはさむように記述する。このように記述することで同期グループの記述途中の電源断に対して、同期フラグエレメントとデータとして記述されたメンバと終端同期フラグエレメントが記憶された順番に従って記述されていない場合には電源断が起こったことが検知できる。また、これらのエレメントの記述の際には、変数ディレクトリ2上にルートフラグフィールド49とチェーンフィールド50を配しておく。ルートフラグには、同期して記述しておくべき変数のエレメントのうち先頭に保存するエレメントかどうかを記述しておき、チェーンフィールド50にはそのエレメントの次に保存するべき変数データ10を示しておく。同期バックアップ処理は、まずルートフラグがONになっている変数データ10を検知すると、その変数ディレクトリ2のチェーンフィールド50が示す別の変数ディレクトリ2を検索し、さらにそこからチェーンフィールド50に記述された変数ディレクトリ2を次々と検索する。そして同期フラグエレメントのデータとしてそのチェーンを記述した後それぞれの変数ディレクトリ2が示す変数データ10がバックアップされ最後に終端同期フラグエレメントを記述する。このようにして同期バックアップを実現することができる。また、一般にフラッシュメモリ101のデータ消去には時間がかかり、その間の電源断がおこると消去作業中のセクタ全体が不定なビット列となってしまう。そのエラーデータを読み込むことがないようにするためには、常に連続して2以上のセクタ3が空き領域になっているように前記非書き込みセクタを設定すればよい。上述の書き込みを行う新しいセクタを検出する過程において、常に非書き込みセクタが2以上連続するように設定し、非書き込みセクタが連続していなければ、少なくともひとつ存在するはずの非書き込みセクタの次のセクタ3を消去する。このように処理することで、たとえ電源断により全体が不定なビットとなったセクタ3であっても常に消去の対象になるためにそこからデータが読み出されることはなくなる。また、消去予定のセクタ3に存在する有効なデータを移行した後でセクタ消去を行うために、データを移行する局面での電源断があったとしても、前述のデータ書き込みにおける電源断対策によってエラーデータの読み込みを防ぐことができる。また、バックアップ処理はバックグラウンドで実行される定期的な処理であるが、情報処理装置への入力電圧が何らかの原因により低下してしまうパワーフェイルなどの特殊なタイミングで、バックアップ処理を実行したい場合がある。また、更新頻度が高い変数と、重要な変数とを区別して保存したい場合もある。パワーフェイルや変数を区別して保存するには、セクタ群を多重化することで対応が可能である。たとえば変数IDを0~FFFまでをAセクタ群として、1000からFFFFまでをBセクタ群として、それ以外をCセクタ群と分けておき、それぞれのセクタ群に対応したバックアップモジュール201を並行して実行する。パワーフェイル時に起動する割り込みプログラムにおいてバックアップしたい変数を登録しておき、割り込みプログラム中でバックアップモジュール201を呼び出し、パワーフェイル時にバックアップ対象の変数を多重化した別のセクタ3に記憶し、電源断に対応する。しかし、セクタ消去中のパワーフェイルの場合には、セクタ消去の処理に非常に時間がかかり、バックアップ処理を行う前に電源断がおこる事がある。このときは一般に割り込み処理でセーブ書き込みはできない。そのため、パワーフェイルデータが設定されている場合には、セクタ消去実行前に必ずパワーフェイルデータをバックアップセーブすることで、パワーフェイルに対しても確実にパワーフェイル対象の変数をバックアップ処理することができるようになる。たとえば、書き込みを行っていたセクタ3の空き領域のサイズが、一定のサイズより小さくなったときに、このバックアップを行い、バックアップが終了した後で消去対象のセクタ3を消去する。以上のようにしてエラーデータを読み込むことなく正常なバックアップデータからアプリケーション変数を復旧することができ、頑健性の高いバックアップ処理を得ることができる。