Oui, vous pouvez écrire manuellement les données par défaut dans l'EEPROM dans le code source. Tout d'abord, consultez ce guide génial sur l'EEPROM avec AVR: le didacticiel AVR EEPROM de Dean. En outre, je dois ajouter qu'il est préférable de créer un fichier .eep contenant les données EEPROM à l'aide du makefile qui sera programmé pour l'appareil avec le code source. Cependant, si vous n'êtes pas familier avec les diverses opérations de makefile et de l'éditeur de liens, cela peut toujours être fait à partir de votre fichier de code source - cela se produira juste dès que le circuit sera alimenté, bloquant l'opération initiale du programme.
Au début du programme (avant toute sorte de boucle principale), vous pouvez faire quelque chose comme ceci:
#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 fonction "mise à jour" vérifie d'abord si cette valeur est déjà là, pour économiser sur les écritures inutiles, en préservant la durée de vie de l'EEPROM. Cependant, cela peut prendre beaucoup de temps pour de très nombreux sites. Il pourrait être préférable de vérifier un seul emplacement. S'il s'agit de la valeur souhaitée, les autres mises à jour peuvent être ignorées complètement. Par exemple:
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 vous cherchez à mettre à jour de grandes quantités de données, essayez d'utiliser les autres fonctions telles que eeprom_update_block(...)
. Et lisez certainement ce tutoriel; c'est bien écrit.
Vous pouvez placer toutes les instructions de mise à jour EEPROM dans une seule instruction conditionnelle de préprocesseur. C'est très simple à faire:
#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_
Ce morceau de code ne sera même pas compilé sauf si vous effectuez les opérations suivantes:
#define _UPDATE_EEPROM_
Vous pouvez y laisser un commentaire, puis décommenter si vous devez modifier les valeurs EEPROM par défaut. Pour plus d'informations sur le préprocesseur C, consultez ce manuel en ligne . Je pense que vous pouvez être plus intéressé par les sections sur les macros et les instructions conditionnelles.