Так, ви можете вручну записати дані за замовчуванням у EEPROM у вихідний код. По-перше, ознайомтеся з цим дивовижним посібником з EEPROM за допомогою AVR: Навчальний посібник Dean's AVR EEPROM. Крім того, слід додати, що кращою ідеєю є створення .eep-файлу, що містить дані EEPROM, використовуючи makefile, який буде запрограмований на пристрій разом із вихідним кодом. Однак якщо ви не знайомі з різними операціями makefile та linker, це все одно можна зробити з вашого файлу вихідного коду - це відбудеться, як тільки ланцюг живиться, зупиняючи початкову операцію програми.
На початку програми (перед будь-яким основним циклом) ви можете зробити щось подібне:
#include <avr/eeprom.h>
#define ADDRESS_1 46 // This could be anything from 0 to the highest EEPROM address
#define ADDRESS_2 52 // This could be anything from 0 to the highest EEPROM address
#define ADDRESS_3 68 // This could be anything from 0 to the highest EEPROM address
uint8_t dataByte1 = 0x7F; // Data for address 1
uint8_t dataByte2 = 0x33; // Data for address 2
uint8_t dataByte3 = 0xCE; // Data for address 3
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
eeprom_update_byte((uint8_t*)ADDRESS_2, dataByte2);
eeprom_update_byte((uint8_t*)ADDRESS_3, dataByte3);
Функція "update" спочатку перевіряє, чи є це значення вже, щоб зберегти на непотрібних записах, зберігаючи термін служби EEPROM. Однак це може зайняти зовсім небагато часу. Можливо, краще перевірити одне місце. Якщо це бажане значення, то решту оновлень можна пропустити повністю. Наприклад:
if(eeprom_read_byte((uint8_t*)SOME_LOCATION) != DESIRED_VALUE){
eeprom_write_byte((uint8_t*)SOME_LOCATION, DESIRED_VALUE);
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
eeprom_update_byte((uint8_t*)ADDRESS_2, dataByte2);
eeprom_update_byte((uint8_t*)ADDRESS_3, dataByte3);
}
Якщо ви хочете оновити велику кількість даних, спробуйте скористатися іншими функціями, такими як eeprom_update_block(...)
. І обов'язково прочитайте цей підручник; це добре написано.
Ви можете помістити всі оператори оновлення EEPROM в один умовний оператор препроцесора. Це зробити дуже просто:
#if defined _UPDATE_EEPROM_
#define ADDRESS_1 46 // This could be anything from 0 to the highest EEPROM address
uint8_t dataByte = 0x7F; // Data for address 1
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
#endif // _UPDATE_EEPROM_
Цей біт коду навіть не буде скомпільовано, якщо ви не зробите наступне:
#define _UPDATE_EEPROM_
Ви можете залишити це як коментар, а потім відмітити, якщо вам потрібно змінити значення EEPROM за замовчуванням. Для отримання додаткової інформації про препроцесор C, ознайомтеся з цим онлайн-посібником . Я думаю, що вас можуть найбільше зацікавити розділи про макроси та умовні заяви.