Piszę większy program na tytułową Xmegę i mam problem z pamięcią EEPROM. Zapisuję tam kilka ustawień (kilkadziesiąt bajtów). Wartości są odczytywane przy uruchomieniu urządzenia, a zapisywane, gdy użytkownik je zmieni.
Niestety, z jakiegoś powodu, co jakiś czas wartość pod w miarę losowym adresem pamięci kasuje się (ustawia na FF). Testuję to uruchamiając urządzenie ponownie kilkanaście / dziesiąt razy. Za którymś (dziesiątym, czy dwudziestym) restartem następuje wykasowanie jakiejś komórki. Adres kasowanej komórki jest nieprzewidywalny, choć jest to zazwyczaj jedna z 3-4 konkretnych, a rzadziej któraś z pozostałych. Moment kasowania jest nieprzewidywalny, to nieraz działa ok przez kilkadziesiąt ponownych uruchomień, a nieraz psuje się po 3-5. W czasie testowania program nie powinien (jeśli jest prawidłowy, to nie ma prawa) nic zapisywać do EEPROM (jeśli nic nie robię na urządzeniu, to następuje tylko odczyt ustawień).
Korzystam z funkcji eeprom_update_word itp. W kodzie jest kilkanaście wywołań tych funkcji. Jeśli zakomentuję je wszystkie, to problem znika - wartości pamięci się nie zmieniają.
Zrobiłem też tak, że przed każdą funkcją zapisu urządzenie wydawało sygnał dźwiękowy. Po kilkunastu restartach któraś komórka znowu się wykasowała, ale urządzenie nie wydało dźwięku. Czyli teoretycznie nie weszło w miejsce kodu, gdzie jest funkcja zapisu. Ale z drugiej strony przecież, gdy usunę wszystkie wywołania funkcji zapisu, to problem znika, więc ta funkcja jakby się wywołuje w czasie niepożądanego skasowania pamięci.
Moim zdaniem możliwości są dwie: albo mam jakiś parszywy błąd w programie, który w losowym momencie kasuje losową komórkę, albo pamięć jest fizycznie wadliwa. Moje testy dają nieco sprzeczne wyniki, które nie wskazują na żadną z teorii.
Nie mam już więcej pomysłów, więc proszę Was o pomoc. Będę bardzo wdzięczny! Dziękuję!
Niestety, z jakiegoś powodu, co jakiś czas wartość pod w miarę losowym adresem pamięci kasuje się (ustawia na FF). Testuję to uruchamiając urządzenie ponownie kilkanaście / dziesiąt razy. Za którymś (dziesiątym, czy dwudziestym) restartem następuje wykasowanie jakiejś komórki. Adres kasowanej komórki jest nieprzewidywalny, choć jest to zazwyczaj jedna z 3-4 konkretnych, a rzadziej któraś z pozostałych. Moment kasowania jest nieprzewidywalny, to nieraz działa ok przez kilkadziesiąt ponownych uruchomień, a nieraz psuje się po 3-5. W czasie testowania program nie powinien (jeśli jest prawidłowy, to nie ma prawa) nic zapisywać do EEPROM (jeśli nic nie robię na urządzeniu, to następuje tylko odczyt ustawień).
Korzystam z funkcji eeprom_update_word itp. W kodzie jest kilkanaście wywołań tych funkcji. Jeśli zakomentuję je wszystkie, to problem znika - wartości pamięci się nie zmieniają.
Zrobiłem też tak, że przed każdą funkcją zapisu urządzenie wydawało sygnał dźwiękowy. Po kilkunastu restartach któraś komórka znowu się wykasowała, ale urządzenie nie wydało dźwięku. Czyli teoretycznie nie weszło w miejsce kodu, gdzie jest funkcja zapisu. Ale z drugiej strony przecież, gdy usunę wszystkie wywołania funkcji zapisu, to problem znika, więc ta funkcja jakby się wywołuje w czasie niepożądanego skasowania pamięci.
Moim zdaniem możliwości są dwie: albo mam jakiś parszywy błąd w programie, który w losowym momencie kasuje losową komórkę, albo pamięć jest fizycznie wadliwa. Moje testy dają nieco sprzeczne wyniki, które nie wskazują na żadną z teorii.
Nie mam już więcej pomysłów, więc proszę Was o pomoc. Będę bardzo wdzięczny! Dziękuję!
