He hecho esto antes - manual de escritura de datos por defecto en la memoria EEPROM en el código fuente. En primer lugar, echa un vistazo a este impresionante guía en la EEPROM con AVR: Decano del AVR Tutoriales También, debo agregar que es una mejor idea para crear una .eep archivo que contiene la EEPROM de datos utilizando el archivo makefile que será programado en el dispositivo junto con el código fuente. Sin embargo, si usted no está familiarizado con varias makefile y el enlazador de operaciones, que todavía se puede hacer desde dentro de su archivo de código fuente - se acaba de suceder tan pronto como el circuito es alimentado, el estancamiento de la inicial de la operación del programa.
En el comienzo del programa (antes de cualquier tipo de bucle principal) se podría 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 "update" verifica primero si ese valor ya está ahí, para guardar en escrituras innecesarias, la preservación de la memoria EEPROM de la vida útil. Sin embargo, haciendo esto por muchos ubicación puede tomar un poco de tiempo. Podría ser mejor para comprobar una única ubicación. Si es que el valor deseado, y luego el resto de las actualizaciones puede ser omitido 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 usted está buscando para actualizar grandes cantidades de datos, trate de usar las otras funciones, tal como eeprom_update_block(...)
. Y, definitivamente, leer el tutorial; está bien escrito.
Usted puede poner todos de la EEPROM de la actualización de las declaraciones en un solo preprocesador de la instrucción condicional. 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 trozo de código no ser compilados a menos que usted haga lo siguiente:
#define _UPDATE_EEPROM_
Usted podría dejar esto como un comentario, a continuación, quite el comentario de si usted necesita para cambiar el valor predeterminado de la EEPROM los valores. Para obtener más información sobre el preprocesador de C, echa un vistazo a este manual en línea. Creo que puede ser la mayoría de los interesados en la sección de macros y sentencias condicionales.