반응형
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)
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));
}
반응형
'프로그래밍 언어' 카테고리의 다른 글
Atmel Micro processor Flash Programming (0) | 2023.09.14 |
---|---|
printf 로 uart 출력방법(AVR) (0) | 2023.09.14 |
입력 출력 간단하게 구현하기(AVR input output) (0) | 2023.09.14 |
[C#] 파일다이얼로그 , OpenFileDialog, SaveFileDialog (0) | 2023.08.14 |
volatile & Cache (0) | 2023.07.13 |