5

不揮発性フラッシュ メモリに格納するアラーム履歴構造を開発しようとしています。フラッシュ メモリの書き込みサイクル数は限られているため、毎回構造内のすべてのフラッシュ ページを書き換えたり、更新されたポインタをキューの先頭/末尾に書き込んだりせずに、構造にレコードを追加する方法が必要です。

さらに、使用可能なフラッシュ メモリ領域が使用されたら、先入れ先出しで追加された最初のレコードから始めて、以前にフラッシュに保存されたレコードの上書きを開始したいと考えています。これにより、アイテムを追加するには循環バッファーが最適だと思います。ただし、レコードを表示するときは、構造をスタックのように機能させたいと考えています。例: レコードは、後入れ先出しの新しい順に表示されます。

構造体のサイズ、ヘッド、テール、インデックスは、レコード自体に格納されない限り格納できません。これは、それらが毎回固定位置に書き出されると、それらが格納されたページの最大書き込みサイクルを超えるためです。

では、スタック、キュー、またはハイブリッド構造を使用する必要がありますか? 電源投入後に再初期化できるように、ヘッド、テール、サイズの情報をフラッシュに保存するにはどうすればよいですか?

4

6 に答える 6

5

関連する質問Circular buffer in Flashを参照してください。

于 2009-11-18T19:46:46.113 に答える
4

ルックアップリングバッファ

どれが最後のエントリであるかを判断できると仮定すると (タイム スタンプなどから、マーカーを書き込む必要はありません)、これも最高のウェア レベリング パフォーマンスを備えています。

于 2009-11-18T19:41:48.060 に答える
2

編集:OPのフラッシュコントローラーには適用されません:コードのウェアレベリングについて心配する必要はありません。フラッシュ メモリ コントローラは、これをバックグラウンドで処理する必要があります。

ただし、これを実行したい場合は、通常の循環バッファーを使用して、スタックの先頭と末尾へのポインターを保持してください。

また、最近使用されていないキャッシュを使用して、フラッシュ上のデータを保存する場所を管理することも検討できます。

于 2009-11-18T19:43:57.550 に答える
0

あなたは間違いなくリングバッファが必要です。しかし、その通りです。メタ情報は少し...興味深いものです。

于 2009-11-18T19:49:22.437 に答える
0

エントリをいくつかのセクションにマップします。セクションがいっぱいになったら、最初のセクションから上書きします。シーケンス番号 (nbr シーケンス番号 > 2 * エントリ) を追加すると、再起動時に最初のエントリが何であるかがわかります。

于 2009-11-18T19:59:26.480 に答える
0

ページに格納された最初の要素がそのページが書き込まれた回数であるリングバッファのバージョンを実行できます。これにより、前のページよりも数字が小さい最初のページを見つけることで、次にどこに書き込むべきかを判断できます。それらがすべて同じ場合は、次の番号から最初から始めます。

于 2009-11-18T20:00:43.840 に答える