pp.425ff.
EEMEMマクロを使えばアドレスではなく変数名で管理できる。
宣言の順番と逆順にメモリーが確保されている。
#include <avr/io.h> #include <avr/eeprom.h> #include "USART.h" const char STR[] = "It started with a trivial-seeming observation."; const int lenOfSTR = sizeof STR; // EEMEMマクロを使って変数を宣言する。 char romStr[lenOfSTR] EEMEM; uint8_t romByte EEMEM; uint16_t romWord EEMEM; int main(){ initUSART(); eeprom_update_block(STR, romStr, lenOfSTR); // (排列を, EEPROMのどこへ, 何バイト)書き込む。 eeprom_update_byte(&romByte, 1); // (EEPROMのどこへ, 1バイト値)を書き込む。 eeprom_update_word(&romWord, 0xbcde); // (EEPROMのどこへ, 2バイト値)を書き込む。 char ramStr[lenOfSTR]; eeprom_read_block(ramStr, romStr, lenOfSTR); // (RAMのどこへ, EEPROMのどこから, 何バイト)を読み出す。 uint8_t b = eeprom_read_byte(&romByte); // (EEPROMのどこから) 1バイト値を読み出す。 uint16_t c = eeprom_read_word(&romWord); // (EEPROMのどこから) 2バイト値を読み出す。 printString(ramStr); printString("\n"); printByte(b) ; printString("\n"); printHexWord(c) ; printString("\n"); return 0; }