Sí, puede escribir manualmente datos predeterminados en EEPROM en el código fuente. Primero, consulte esta increíble guía sobre la EEPROM con AVR: Tutorial de EEPROM AVR de Dean. Además, debo agregar que es una mejor idea crear un archivo .eep que contenga los datos EEPROM utilizando el archivo MAKE que se programará en el dispositivo junto con el código fuente. Sin embargo, si no está familiarizado con varias operaciones de archivos MAKE y enlazadores, aún puede hacerlo desde su archivo de código fuente; solo sucederá tan pronto como se encienda el circuito, deteniendo la operación inicial del programa.
Al comienzo del programa (antes de cualquier tipo de bucle principal) puede hacer algo como esto:
#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);
La función "actualizar" comprueba primero para ver si ese valor ya está allí, para ahorrar en escrituras innecesarias, preservando la vida útil de EEPROM. Sin embargo, hacer esto para muchas ubicaciones puede llevar bastante tiempo. Puede ser mejor verificar una sola ubicación. Si es el valor deseado, el resto de las actualizaciones se pueden omitir por completo. Por ejemplo:
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);
}
Si está buscando actualizar grandes cantidades de datos, intente usar otras funciones como eeprom_update_block(...)
. Y definitivamente lea ese tutorial; Está bien escrito.
Puede poner todas las declaraciones de actualización de EEPROM en una sola declaración condicional de preprocesador. Esto es muy sencillo de hacer:
#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_
Este bit de código ni siquiera se compilará a menos que haga lo siguiente:
#define _UPDATE_EEPROM_
Puede dejar esto allí como un comentario, luego descomentar si necesita cambiar los valores predeterminados de EEPROM. Para obtener más información sobre el preprocesador C, consulte este manual en línea . Creo que puede estar más interesado en las secciones sobre macros y declaraciones condicionales.