Ja, Sie können Standarddaten im Quellcode manuell in das EEPROM schreiben. Schauen Sie sich zuerst diese fantastische Anleitung zum EEPROM mit AVR an: Dean's AVR EEPROM Tutorial. Außerdem sollte ich hinzufügen, dass es eine bessere Idee ist, eine .eep-Datei mit den EEPROM-Daten unter Verwendung des Makefiles zu erstellen, das zusammen mit dem Quellcode auf dem Gerät programmiert wird. Wenn Sie jedoch mit verschiedenen Makefile- und Linker-Vorgängen nicht vertraut sind, können Sie diese weiterhin in Ihrer Quellcodedatei ausführen. Dies geschieht nur, sobald die Schaltung mit Strom versorgt wird und die anfängliche Programmoperation blockiert.
Zu Beginn des Programms (vor jeder Art von Hauptschleife) können Sie Folgendes tun:
#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);
Die Funktion "Aktualisieren" prüft zuerst, ob dieser Wert bereits vorhanden ist, um unnötige Schreibvorgänge zu sparen und die Lebensdauer des EEPROM zu erhalten. Dies für sehr viele Standorte zu tun, kann jedoch einige Zeit in Anspruch nehmen. Es ist möglicherweise besser, einen einzelnen Standort zu überprüfen. Wenn dies der gewünschte Wert ist, können die restlichen Aktualisierungen vollständig übersprungen werden. Beispielsweise:
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);
}
Wenn Sie große Datenmengen aktualisieren möchten, verwenden Sie die anderen Funktionen wie z eeprom_update_block(...)
. Und lesen Sie auf jeden Fall dieses Tutorial; es ist gut geschrieben.
Sie können alle EEPROM-Aktualisierungsanweisungen in eine einzige bedingte Präprozessoranweisung einfügen. Dies ist sehr einfach zu tun:
#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_
Dieses Codebit wird erst kompiliert, wenn Sie Folgendes tun:
#define _UPDATE_EEPROM_
Sie können dies als Kommentar hinterlassen und dann auskommentieren, wenn Sie die Standard-EEPROM-Werte ändern müssen. Weitere Informationen zum C-Präprozessor finden Sie in diesem Online-Handbuch . Ich denke, Sie interessieren sich vielleicht am meisten für die Abschnitte über Makros und bedingte Anweisungen.