mal wieder eine EEPROM Frage
Hallo,
ich habe ein Problem mit dem EEPROM (ATMega32) , und zwar habe möchte ich gerne Daten im EEPROM ablegen, bei jeden neustart des Gerätes sollen diese Daten ausgelesen werden.
Ich habe bis jetzt im Datenblatt gelesen, auf http://www.mikrocontroller.net/artic...R-GCC-Tutorial und natürlich hier im Roboternetz gesucht. Vor allem der Thread https://www.roboternetz.de/phpBB2/ze...ghlight=eeprom scheint ganz gut zu sein, doch ich habe mit meinen eher mäßigen C Kenntnissen nicht alles verstanden.
Ich habe bei mir ein "char h_wert[15][4];"
Bei starten des gerätes sollen daten aus dem EEPROM gelesen werden und in das Feld h_wert geschrieben werden. Wenn das Gerät erstmal läuft, sollen abundzu bestimmte werte aus h_feld wieder in den EEPROM gespeichert werden...
Könnte jemand versuchen, mit zu erklären wie genau das funktioniert? Schonmal Danke im Voraus :-)
Bitte um Hilfe bei EEPROMfragen: EE.., Foo, Arrays ..
Ich möchte mehrere Vektoren im EEPROM (m)eines Controllers - mega.. - ablegen, Bytes und Words. Ich möchte die auf ganz bestimmten Stellen ablegen, damit ich nach einem Flashen das EEPROM nicht neu beschreiben muss bzw. damit ich nach dem Flashen auf die "alten" EEPROM-Werte auch wieder zugreifen kann, da es sich um Einstell- und Justagedaten dreht.
Anmerkung: habe den alten Thread wegen des genau passenden Titels wieder aufgewärmt.
Variable kann ich im EEPROM an einer bestimmten Stelle ablegen und auch wieder auslesen, auch nach dem neu Programmieren, das läuft problemlos. Ein Array der Art
/* Byte-Array */
uint8_t eeFooByteArray1[] EEMEM = { 18, 3, 70 };
uint8_t eeFooByteArray2[] EEMEM = { 30, 7, 79 };
kommt dann aber möglicherweise an einen Speicherplatz, der variieren kann. So gehts mir jedenfalls bei einem früheren, winzigen Projekt. Von diesem Projekt habe ich etwa diesen Stand:
Textfeld, das ins EEPROM beim Flashvorgang geschrieben wird.
unsigned char TestTimedOut[] EEMEM = "Timeout!";
Definition einer (EINER!) Bytevariablen auf die Adresse 0x004
#define EE_VALUE2 0x004 // Bytevariable
Wert dieser Variablen
[EE_VALUE2] = 0xFF
und so eine Schreibroutine
Code:
// ============================================================================== =
void DEEsch (int8_t data, uint8_t EEPadd) // Datum wegschreiben auf Adresse
{ //
// Evtl Parameter : (unsigned short address, unsigned char data)
// - - - - - - - - - - - - - - -// cli ();
while (EECR & (1<<EEPE)); // Schreiben möglich ? vorheriger Zugriff zu Ende?
EEAR = EEPadd; // Setze Adresse
EEDR = data; // Schreib Datum ins EEPROM-Data register
EECR |= (1<<EEMPE); //
EECR |= (1<<EEPE); // Starte Schreibzugriff
sei (); //
// - - - - - - - - - - - - - - -//
} //
// === Ende DEEsch (uint8_t dat, uint8_t EEPadd)
// ============================================================================== =
Bitte jetzt um Hilfe/Erläuterung zu diesen Fragen, der Vollständigkeit halber auch ein paar Anfängerfragen. Danke schon jetzt für die Antworten.
Wie definiere ich den GENAUEN Ort eines Datenfeldes im EEPROM?
Was bedeutet dieses ..foo.., ..Foo.. das ich bei EEPROM-Themen immer wieder lese?
Was bedeutet in den Zeilen
// schreiben
eeprom_write_word (&eeFooWord, 2222);
dieses &eeFooWord? Word verstehe ich (vermute ich), aber & und Foo ? ?