Forum: Mikrocontroller und Digitale Elektronik Zweidimensionales Array im EEprom ablegen


von Laserbrenner (Gast)


Lesenswert?

Guten Morgen,

nach langen erfolglosen suchen hoffe ich hier von euch eine Antwort zu 
bekommen.

ich habe ein zweidiemensonale Array
1
uint16_t IO_Feld[20][5];

welches ich in EEprom ablegen möchte.
1
uint16_t eeFooByteArray1[20][5] EEMEM ;
2
....
3
eeprom_busy_wait ();
4
eeprom_write_block (IO_Feld, &eeFooByteArray1, sizeof(IO_Feld));

So scheint es nicht zu gehen! habt Ihr einen Tip?

gruß
Matthias

von Noname (Gast)


Lesenswert?

Der Name eines Arrays ergibt schon die Adresse des ersten Elementes.
Die nochmalige Bildung einer Referenz ist unnötig und sollte auch 
mindestens eine Warnung ergeben, wenn ich nicht irre.
1
eeprom_write_block (IO_Feld, eeFooByteArray1, sizeof(IO_Feld));

Daneben gibt es weitere Fallstricke.
Welchen Prozessor verwendest Du?

von Bastler (Gast)


Lesenswert?

Du kannst doch das Array von Hand mittels zweier for-Schleifen linear im 
EEPROM ablegen. Also sowas wie
1
for (i = 0; i <= max_x; i++) {
2
 for (j = 0; j <= max_y; j++) {
3
  
4
   // Pseudocode:
5
   ADDR = EEPROM_ADDRESS + (i * max_x + j) * sizeof(type);
6
   write(ADDR, feld[i][j]);
7
8
 }
9
}

Gruß
Jens

von Noname (Gast)


Lesenswert?

>Du kannst doch das Array von Hand mittels zweier for-Schleifen linear im
>EEPROM ablegen.

Das ginge wahrscheinlich, aber was wäre damit gewonnen?

von Bastler (Gast)


Lesenswert?

Wenn es Laserbrenner nicht um Effizienz geht hat er jetzt eine Lösung. 
Denn Bytes in den EEPROM zu schreiben ist wirklich einfach.

Gruß
Jens

von Laserbrenner (Gast)


Lesenswert?

Huuui,
geht das schnell hier bei euch, vielen dank für die Antworten.

eeprom_write_block (IO_Feld, eeFooByteArray1, sizeof(IO_Feld));

so scheint es zu klappen ( ohne &), hatte aber keinen Fehler erhalten!
Noch eine kurze Frage was ist der genaue unterschied zwischen

eeprom_write_byte und eeprom_update_byte?

gruß

von Karl H. (kbuchegg)


Lesenswert?

Laserbrenner schrieb:

> eeprom_write_byte und eeprom_update_byte?

Antwort in Pseudocode:
1
   update( adress, value )
2
   {
3
     if( read( adress ) != value )
4
      write( adress, value )
5
   }

von drhdtjrf (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Laserbrenner schrieb:
>
>> eeprom_write_byte und eeprom_update_byte?
>
> Antwort in Pseudocode:
>
> ...
...weil eben der EEPROM nicht unbegrenzt oft geschrieben werden kann.

von Laserbrenner (Gast)


Lesenswert?

ah ok,
muss vor einen eeprom_update_byte einmal ein  eeprom_write_byte 
ausgeführt werden? doch eigendlich nicht oder?

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.