Cześć,
zagłębiam się trochę w wykorzystanie pamięci eeprom i flash i przeglądając avrowe funkcje nvm natknąłem się na takie stwierdzenie:
i chyba dobrze, bo wydaje mi się, że występuje u mnie taka sytuacja. W przerwaniu czytam trochę danych z pamięci flash zadeklarowanych tak:
do których później "dobieram się" normalnie jak do każdej innej zmiennej w moim ISR. Jednocześnie w pętli głównej programu korzystam z biblioteki eeprom.h i funkcji odczytu i zapisu z niej. Stąd chciałbym prosić o pomoc w rozwianiu kilku niejasności:
Czy dobrze rozumiem, że dostęp do pamięci flash oraz EEPROM w xmegach zawsze wykorzystuje kontroler NVM? Czyli niezależnie, czy używam funkcji z eeprom.h, czy korzystam z funkcji z biblioteki nvm.h żeby odczytywać/zapisywać dane w EEPROM, to powinienem wykonywać je w atomic block ze względu na to, że odczytuję też pamięć flash w obsłudze przerwania?
zagłębiam się trochę w wykorzystanie pamięci eeprom i flash i przeglądając avrowe funkcje nvm natknąłem się na takie stwierdzenie:
Cytat:The functions in this module are modifying the NVM.CMD register.
* If the application are using program space access in interrupts
* (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts
* needs to be disabled when running EEPROM access functions. If not
* the program space reads will be corrupted.
i chyba dobrze, bo wydaje mi się, że występuje u mnie taka sytuacja. W przerwaniu czytam trochę danych z pamięci flash zadeklarowanych tak:
Kod: C / C++
do których później "dobieram się" normalnie jak do każdej innej zmiennej w moim ISR. Jednocześnie w pętli głównej programu korzystam z biblioteki eeprom.h i funkcji odczytu i zapisu z niej. Stąd chciałbym prosić o pomoc w rozwianiu kilku niejasności:
Czy dobrze rozumiem, że dostęp do pamięci flash oraz EEPROM w xmegach zawsze wykorzystuje kontroler NVM? Czyli niezależnie, czy używam funkcji z eeprom.h, czy korzystam z funkcji z biblioteki nvm.h żeby odczytywać/zapisywać dane w EEPROM, to powinienem wykonywać je w atomic block ze względu na to, że odczytuję też pamięć flash w obsłudze przerwania?