Hej, bardzo mi się podoba twórczość mirka36, jak do tej pory wiekszość jego porad działała bez zarzutu, do czasu gdy natknąłem się na eeprom.
Korzystam z atmel studio 6.1 (kwestia przyzwyczajenia). Problem dotyczy zapisu/odczytu bloku zmiennych. Mam wrażenie, że zmienne te albo zapisują się pod niewłaściwym adresem, albo coś przerywa zapis/odczyt, albo robie to błędnie, albo to przez dużą ilość zmiennych w strukturze typu float sprawia problem, albo sam nie wiem w czym rzecz i gdzie dalej szukać.
Założenia są takie, że podczas pierwszego uruchomienia programu ma przyjąć wartości domyślne. W trakcie działania programu te wartości będą zmieniane, później kopia RAM->EEPROM,
Przy starcie najlepiej jakby automatycznie wykrywał czy nastąpiła zmiana względem domyślnych wartości, jednak aby ułatwić debugging - póki co zrobilem sobie na buttonsach, probowalem również z Mirkowskim check_and_load_defaults, jednak za kazdym razem wczytywal ustawienia domyslne (funkcja otrzymuje same 0xFF??? to by wskazywało, że zapis szwankuje).
Z eepromem bawię się pierwszy raz, jednak znając działanie większości istotnych funkcji służącym przerzutu z jednej pamięci do drugiej nadal nie jestem w stanie sobie z tym poradzić.
oto fragmenty programu z którymi walczę od pół dnia, jeśli nie więcej

(( wrzucam to co jest odpowiedzialne za zapisy, odczyty ponieważ nie chce zaśmiecać :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Rezultat jest taki, że gdy wybiore "z palca" wczytaj eeprom -> ram, jako wynik dtostrf(jakis parametr z CONFIG_RAM) dostaje "NAN" - prawdopodobnie "not a number" (reakcja na 0xFF???)
Stąd też albo zapis szwankuje albo odczyt, albo po prostu nie nadaje sie do tego i powinienem olać sprawe ;D.
Gdy wgram pliczek EEPROM wygenerowany przez kompilator i zrobie wczytywanie eeprom przy starcie otrzymuję wszędzie zera. (A to raczej prawidłowo bo deklaruję
CONFIG CONFIG_EEMEM EEMEM; bez żadnych wartości) .
samo void USTAWIENIA_INOUT() znajduje się w przerwaniu od timera. Do tej pory nie odnotowalem problemow z czyms takim:
ISR()
{
disable ISR;
rob cos.
enable ISR;
}
Jeszcze pomyslalem o czyms takim jak ATOMIC_BLOCK (podobno nie dopuszcza do przerwania jakiejs procedury, ale to moze tylko pogloski

)
Prosze serdecznie o pomoc, dziekuje.
------------------------ [ Dodano po: 14 minutach ]ALE ZE MNIE DUPKA WOLOWA

pomylilem argumenty w:
eeprom_write_block (&CONFIG_EEMEM, &CONFIG_RAM, sizeof(CONFIG_EEMEM) );
powinno byc:
eeprom_write_block (&CONFIG_RAM, &CONFIG_EEMEM, sizeof(CONFIG_RAM) );
Temat do skasowania, albo mozecie zostawic i sie ze mnie smiac i obrzucac jablkami

Albo zostawic jako przestroga - dopiero po napisaniu postu i przeczytaniu jeszcze raz uswiadomilem sobie ta pomylke.