Forum: Mikrocontroller und Digitale Elektronik wie struct in flash speichern?


von markus (Gast)


Lesenswert?

hi,

ich versuche gerade eine variable (ein struct) in einem speicherblock in 
einem flash speicher abzulegen. ich habe dazu eine fertige bibliothek 
die sich um den großteil kümmert, d.h. ich muss z.b. nur auf einen 
vordefinierten ram-block meine zu speichernden daten schreiben und dann 
die write-funktion aufrufen, dadurch wird der ram-block automatisch in 
den flash geschrieben. oder wenn ich die read-funktion aufrufe wird 
automatisch der vordefinierte teil vom flash ausgelesen und in meinen 
ram-block geschrieben.
kann ich hier überhaupt das komplette struct übergeben (in den 
flash-block speichern) so dass ich beim lesen des gleichen flash-blocks 
wieder das genau gleiche struct bekomme (stichwort struct alignment)?

d.h. beim speichern würde ich einfach per memcpy() das komplette struct 
auf den ram-block kopieren (z.b. memcpy(&ramblock, &my_struct, 
sizeof(my_stuct)) und dann die write-funktion aufrufen. kann ich dann 
auch später die daten einfach wieder so in ein gleiches struct auslesen? 
(z.b. per memcpy(&my_struct_read, &ramblock, sizeof(ramblock))
oder bekomme ich da ein problem mit dem struct alignement (padding)? 
oder ist das dann egal weil ich eh das struct samt padding in den 
flash-speicher kopiere und auch den gleichen speicher wieder samt 
padding beim lesen rauskopiere?

also: muss mich in diesem fall das struct alignement bzw padding 
überhaupt interessieren?

von Karl H. (kbuchegg)


Lesenswert?

markus schrieb:

> also: muss mich in diesem fall das struct alignement bzw padding
> überhaupt interessieren?

Nein.

Deine struct ist einefach nur eine Speicherfläche, die du in diesem Fall 
als ganzes ansprichst. Die Größe dieses Speicherbereichs bekommst du 
mittels sizeof. Mehr brauchst du dann nicht.

> ich muss z.b. nur auf einen vordefinierten ram-block meine zu speichernden
> daten schreiben und dann die write-funktion aufrufen

Wer macht denn sowas?
Das ist wegen funktionalem Design-Fehler einmal umkopieren zuviel, mit 
der möglichen Option eines Überschreibfehlers, wenn dieser Ram-Block 
nicht groß genug ist. Warum kann sich die Schreibe Funktion die Bytes 
nicht direkt von deiner struct holen? So ist das doch Murks.

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
Noch kein Account? Hier anmelden.