본문 바로가기
프로그래밍 언어

AVR EEPROM 읽고 쓰기

by 청운추월 2023. 9. 14.
반응형
AVR EEPROM을 Read 하거나 Write 하기 위해서는
주소가 필요합니다.
 
uint8_t eeprom_read_byte (const uint8_t *addr)
void eeprom_write_byte (uint8_t *addr, uint8_t value)
uint16_t eeprom_read_word (const uint16_t *addr)
void eeprom_write_word (uint16_t *addr, uint16_t value)
void eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t n)
void eeprom_write_block (void *pointer_eeprom, const void *pointer_ram, size_t n)
 
저장하는 Item이 몇개 되지 않으면 상관이 없지만
많을 경우 일일이 주소를 지정하려면 힘들겠지요
AVR-GCC에서는  이러한 문제를 EEMEM 속성으로 해결할 수 있습니다.
 
 
EEMEM을 선언하면 GCC 컴파일러가 자동으로 Address를 부여하게 됩니다.
이러면 주소에 대해 신경을 안써도 되겠지요.
 
uint8_t EEMEM NonVolatileChar;
uint16_t EEMEM NonVolatileInt;
uint8_t EEMEM NonVolatileString[10];
int main(void){
 
uint8_t SRAMchar;
uint16_t SRAMint;
uint8_t SRAMstring[10];
 
SRAMchar = eeprom_read_byte(&NonVolatileChar);
SRAMint = eeprom_read_word(&NonVolatileInt);
eeprom_read_block((void*)&SRAMstring, (const void*)&NonVolatileString, sizeof( SRAMstring));
 
eeprom_write_byte(&NonVolatileChar,SRAMchar);
eeprom_write_word(&NonVolatileInt,SRAMint );
eeprom_write_block((void*)&SRAMstring, (const void*)&NonVolatileString, sizeof(SRAMstring));
 
}
 
 
반응형