2d-Array im Eeprom

Gast #1472926
Lesenswert?

Hallo Leute!


Hab ein kleines Problem:
ich möchte im EEprom meines Atmega 16 ein 2d-Array erstellen.
Das mach ich grundsätzlich mit:

int eeAdresse[10][p] EEMEM;

Das Problem ist jetzt nur, dass ich den zweiten Wert erst währen des 
Programmes kenne. Die Anweisung oben lässt mir der Compiler aber nicht 
in die main schreiben (error: section attribute cannot be specified for 
local variables)
Wie kann ich das Problem lösen? Gut ich könnte einfach mal ein größeres 
Array (das auf jedenfall reicht) im EEprom reservieren, aber das ist 
wohl eher nur eine Notlösung.

Wäre super, wenn mir jemand helfen könnte.
Vielen Dank!!
Gast #1472957
Lesenswert?

Das Array dynamisch im RAM anlegen und bei bedarf eben ins EEPROM 
kopieren.
Oder hab ich einen Denkfehler?

Aber was bringt dir das ganze eigentlich. Wenn die größe des Datenfeldes 
vom Programm abhängt kann sie doch immer anderst sein. Warum also dann 
dauerhaft speichern? Beim nächsten mal einschalten stimmts dann ja eh 
nicht mehr.
Gast #1472989
Lesenswert?

> int eeAdresse[10][p] EEMEM;
>
> Das Problem ist jetzt nur, dass ich den zweiten Wert erst währen des
> Programmes kenne. Die Anweisung oben lässt mir der Compiler aber nicht
> in die main schreiben (error: section attribute cannot be specified for
> local variables)

Richtig. Wie sollte der Linker denn auch die Position der Variablen und 
aller anderen bestimmen, wenn er die Größe nicht kennt?

> Wie kann ich das Problem lösen? Gut ich könnte einfach mal ein größeres
> Array (das auf jedenfall reicht) im EEprom reservieren, aber das ist
> wohl eher nur eine Notlösung.

Normalerweise verwaltet der Linker den EEPROM, aber der muß dann zur 
Linkzeit die Größen aller Variablen kennen. Wenn du das nicht willst, 
wirst du den Speicher selbst verwalten müssen. Dazu könntest du einfach 
ein Array aus char über den Gesamten EEPROM legen und dir darauf dann 
eine eigene Speicherverwaltung aufsetzen.
Gast #1474276
Lesenswert?

Hallo!

Um mal noch genauer zu beschreiben, warum ich das ganze eigentlich 
brauch.

Das System hat einen Referenzmodus in dem einige Paramter vom Benutzer 
eingeben werden. Diese Werte müssen dauerhaft gespeichert werden, damit 
man diesen Referenzmodus nicht nochmal machen muss.
Und in diesem Modus gibt es den Paramter p und dann p-Werte die 
gespeichert werden müssen.
Dieser Paramter p kann sich ändern wenn das System wieder neu über den 
Referenzmodus eingestellt wird (passiert aber eher selten).

Ich sehe jetzt allerdings ein, dass eine dynamische Speicherverwaltung 
eigentlich gar nicht nötig ist, weil der Speicher sonst gar net genutzt 
wird und es keine Speicherkonflikte geben wird.
Dachte nur das es einfach logisch wäre so vorzugehen:
Lese P und die dazugehörigen p-Werte ein (erstmal in ein dynamisch 
erzeugtes Array) und nach Abschluss des Referenzmodus werden diese Werte 
in ein passendes Array im Eeprom kopiert.
Werde ich jetzt wohl auch so machen, aber speicher es halt in ein sicher 
ausreichend großes Array im Eeprom.

Vielen Dank!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren