いくつかのアプローチがありますが、選択はEEPROMのサイズ、レコードの最大数(Nと表記します)、レコードの最大サイズ(Sとしましょう)によって異なります。 最初のアプローチは、 S)< =フリーEEPROMサイズの場合、各レコードに最大サイズの等ブロックを割り当てることができます。たとえば、EEPROMのサイズが2048で、各レコードが最大31バイトで、レコード数が64を超えない場合は、レコードのサイズを示す最初のバイトを使用して、それぞれ32バイトの64レコードを割り当てることができます。
各レコードのサイズは、(あなたができるだけ多くのモミしたい)広い範囲で変えることができ、または合計数が定義されていない場合、2つの断片化があるアプローチ:
1)のデータを最適化。必要なサイズのブロックが連続してない場合は、必要なサイズの空きブロックがなくなるまですべてのデータを移動します。
たとえば、レコードサイズが127バイト以内に変更された場合、最初の1バイトを使用してブロックのタイプとサイズを指定できます。例えば。上位ビットはブロックが空いている場合は1、データが含まれている場合は0です。下位7ビットはブロックサイズを含む。 この方法は十分ですが、データが移動されるため、データへのすべての参照を適切な方法で更新する必要があります。
2)データを断片化して格納します。特定のサイズのブロック数を割り当てることができます(たとえば、それぞれ32バイト= 2048バイトのEEPROMに対して最大64レコード)。最初のものには、データが続くブロックのインデックスが含まれます。つまり、0xFEはチェーンの最後のブロックの値、0xFFは空のブロックを示す値です。データを格納するブロックのその他の31バイト。 読み取りプロセスがやや複雑になる可能性がありますが、各レコードのデータの場所は全期間にわたって変更されません。
最大レコード長と最小レコード長はどれくらいですか?レコードはいくつですか? –
約3000レコード、最小約40、最大80バイトです。私は外部メモリを使用していますが、私の問題は組織にあります。レコードを簡単に検索してアクセスする方法 – ZonderComand
おそらく3000x80バイトが利用可能ですが、おそらくすべてのレコードを80またはおそらく128バイトにして潜在的なページ境界に合わせます。あなたがどのようにレコードを "検索"するかは、あなたが探しているものによって異なります。何らかの並べ替えが意味をなさないとは思っていませんが、何らかのインデックス/マーキング/グループ化が考えられます。 –