Hallo, ich habe bei einer Software für einen PIC32-µC eine Struktur in der Form: struct Daten { unsigned char Daten_1[10]; unsigned char Daten_2; unsigned short Daten_3; signed int Daten_4; unsigned char Daten_5; ... } EEPROM_Daten; Diese Struktur möchte ich so wie sie im RAM abgelegt ist in ein EEPROM schreiben und später wieder vom EEPROM ins RAM zurückschreiben. Dazu möchte ich die Länge der Struktur ermitteln und sie dann Byte für Byte bearbeiten, ohne ihren Aufbau (der sich gelegentlich ändern wird) beachten zu müssen. Meine Frage dazu ist: Wie adressiere ich die einzelnen Bytes der Struktur? Für alle Hinweise möchte ich mich schon vorweg ganz herzlich bedanken.
Wenn du die Größe deiner Struktur kennst:
void writeDatenToEeprom(struct Daten *data, uint8_t size)
{
uint8_t i;
uint8_t eepAddr;
// hier eepAddr auf die gewünschte Startposition setzen
for (i=0; i<size; i++)
{
eep_write_byte( ((uint8_t *) data)[i]);
eepAddr++;
}
}
hardcore-Variante:
1 | uint8_t* p = (uint8_t*) &EEPROM_Daten; |
2 | |
3 | for (int i=0; i<structLength ; i++) |
4 | write_eeprombyte(irgendwo, p[i]); |
Alternativ per union, oder per memcopy in ein uint8_t-Array, aber portabel ist das halt alles nicht. Oliver
Frank Sch. schrieb: > ohne ihren Aufbau (der sich gelegentlich ändern wird) > beachten zu müssen. http://de.wikipedia.org/wiki/ASN.1
Ich würde Dir empfehlen noch eine Prüfsumme dazu zu speichern. Im einfachsten Fall eine Längsparität (xor mit basiswert) oder besser ein crc8 oder crc16
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.