www.eprace.edu.pl » system-wrzutnikowy » Opis budowy i oprogramowania urządzenia » Pamięć nieulotna EEPROM

Pamięć nieulotna EEPROM

Jednym z najważniejszych elementów programu jest możliwość zapamiętywania ustawień wprowadzonych przez użytkownika, lub wartości parametrów wypracowanych w toku działania programu. W sterowniku "SPA - 1 n" z powodzeniem użyto kilku technik obsługi wbudowanej pamięci EEPROM:

- zapis / odczyt z pamięci bloku danych typu string z użyciem operatora sizeof,

- zapis / odczyt z pamięci bloku danych przechowywanych w strukturze (sizeof),

- zapis / odczyt z pamięci danych adresowanych bezpośrednio

Rozbicie danych na tzw. bloki funkcjonalne pozwoliło na zminimalizowanie liczby zapisów do pamięci EEPROM. Jak wiadomo, pamięc EEPROM może być odczytywana dowolną ilość razy. Jednak posiada ona skończoną liczbę operacji kasowania, co przy źle skonstruowanym oprogramowaniu może prowadzić do trwałego uszkodzenia pojedynczych komórek. Znane są algorytmy zapisu do pamięci używające techniki tzw. "wear levelling"5, jednak w tym przypadku mogłyby one nie odnieść oczekiwanego rezultatu. Niestety, specyfika funkcji bibliotecznych kompilatora avr-gcc powoduje, że każdorazowo przed dokonaniem zapisu nowej wartości komórka jest najpierw kasowana.

W pętli głównej umieszczona jest funkcja realizująca cykliczne sprawdzanie zawartości pamięci EEPROM oraz zmiennych w pamięci RAM (procesowych i programowalnych). Jeżeli funkcja ta wykryje przekłamania w zawartości pamięci, to program główny zostaje przerwany a sterownik przechodzi do trybu oczekiwania na ręczne zrestartowanie. Zastosowanie tego typu funkcji zabezpieczającej poprawne działanie urządzenia niestety pociągnęło za sobą pewne komplikacje. Zmienne poddawane sprawdzeniu musiały zostać zaadresowane bezpośrednio. Stąd jedynie inne zmienne przechowywane w strukturach lub pod postacią string mogły używać automatycznych funkcji zapisu / odczytu blokowego z wykorzystaniem atrybutów EEMEM, operatora sizeof itp. Nie byłoby to tak istotne, gdyby nie fakt iż część zmiennych podlegających sprawdzeniu bezpośrednio indeksuje niektóre tablice (np. w menu użytkownika). Teoretycznie kompilator winien był umieszczać zmienne w pamięci EEPROM zawsze w tym samym miejscu - jednak nie jest to regułą. Aby zabezpieczyć się przed sytuacjami w których np. po wgraniu nowego firmware urządzenie nie chce poprawnie wystartować program sam bada, czy parametry robocze są poprawne. Istnieje jeszcze jeden plus takiego rozwiązania. W przypadku degradacji pamięci EEPROM (np. wada produkcyjna), egzemplarz urządzenia zostanie łatwo wychwycony zanim zacznie sprawiać problemy w użytkowaniu. Oprócz tego, dzięki jawnej adresacji parametrów możliwe będzie ustalenie dokładnie komórki pamięci EEPROM, która uległa uszkodzeniu i jej ewentualna zamiana na inną.

Rys. 17- Algorytm sprawdzania integralności pamięci ustawień



komentarze

Copyright © 2008-2010 EPrace oraz autorzy prac.