pierwsze, zarządzanie blok:
Put mniejszy nagłówek na początku każdego bloku. Najważniejszą rzeczą, której potrzebujesz do śledzenia "najstarszego" i "najnowszego", jest numer bloku, który po prostu zwiększa modulo k. k musi być większa niż całkowita liczba bloków. Najlepiej, aby wartość k była mniejsza niż wartość MAX (na przykład 0xFFFF), aby można było łatwo określić, co jest wymazanym blokiem.
Przy rozruchu, kod odczytuje nagłówki każdego bloku z kolei, i lokalizuje pierwszy i ostatni bloków w kolejności, która jest n i + 1 = (n i + 1) MODULO k. Uważaj, aby się nie pomylić przez skasowane bloki (numer bloku to np. 0xFFFF) lub dane, które są w jakiś sposób uszkodzone (na przykład niekompletne kasowanie).
ramach każdego bloku
Każdy blok początkowo zaczyna pusty (każdy bajt 0xFF). Każdy rekord jest po prostu pisany jeden po drugim. Jeśli posiadasz rekordy o ustalonym rozmiarze, możesz uzyskać do niego dostęp za pomocą prostego indeksu. Jeśli posiadasz rekordy o zmiennych rozmiarach, to aby je odczytać musisz skanować od początku bloku, stylu listy połączonej.
Jeśli chcesz mieć rekordy o zmiennych rozmiarach, ale unikaj skanowania liniowego, możesz mieć dobrze zdefiniowany nagłówek dla każdego rekordu. Na przykład. użyj 0 jako ogranicznika rekordu i-kod (lub COBS/R-kod) każdego rekordu. Lub użyj bajtu do wyboru jako ogranicznika i "uciec", że bajt, jeśli występuje w każdym rekordzie (podobny do PPP protocol).
Po uruchomieniu, gdy znasz swój najnowszy blok, możesz wykonać skanowanie liniowe dla najnowszego rekordu. Lub jeśli posiadasz stałe rekordy lub ograniczniki rekordów, możesz wykonać wyszukiwanie binarne.
Erase szeregowanie
Dla niektórych układów pamięci Flash, kasowanie bloku może trwać dużo czasu - np. 5 sekund. Rozważ zaplanowanie wymazywania jako zadania w tle trochę "z wyprzedzeniem". Na przykład. gdy aktualny blok jest wypełniony w x%, a następnie zacznij kasować następny blok.
Record numeracji
Możesz zapisów rejestracyjnych. Sposób, w jaki zrobiłem to w przeszłości, to umieszczenie w nagłówku każdego bloku rekordowego numeru pierwszego rekordu. Następnie oprogramowanie musi liczyć numery każdego rekordu w bloku.
kontrolna lub CRC
Jeśli chcesz, aby wykryć uszkodzone dane (np niekompletne zapisuje lub wymazuje z powodu niespodziewanej awarii zasilania), a następnie można dodać sumę kontrolną lub CRC dla każdego rekordu, a może i do bloku nagłówek. Zauważ, że CRC bloku nagłówka obejmowałaby tylko sam nagłówek, a nie rekordy, ponieważ nie można go ponownie napisać po zapisaniu każdego nowego rekordu.
I Jestem zdezorientowany twoim językiem. Bufor, według mnie, jest szybkim, zmiennym elementem pamięci, który często się zmienia. Jak słusznie zauważysz, pamięć flash może mieć pewne problemy z tym. Czy możesz podać nieco więcej kontekstu lub szczegółów dotyczących tego, co próbujesz zrobić i dlaczego? – Mikeb
Chcę zapisać dane w pamięci nieulotnej. Pamięć nieulotna, którą mam, jest flashowa. Niestała jest ważna, ponieważ produkt może być wyłączony na pewien czas i nie chcę stracić danych. Po ponownym włączeniu zasilania, należy położyć następny kawałek danych po ostatnim. – Robert