Forum: Mikrocontroller und Digitale Elektronik 2d-Array im Eeprom


von Martin Sche. (Gast)


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!!

von fb (Gast)


Lesenswert?

Warum ist das eine Notlösung ?
Der Speicher ist sowieso da, ob du nun ihn benutzt oder nicht.

von Vlad T. (vlad_tepesch)


Lesenswert?

dann schreib halt kein 2d array ins eeprom, sondern einzelne datensätze
und im ersten Feld des eeproms schreibste, wieviel drin stehen.

alternativ kannste natrülcih auch den maximumwert da rein schreiben.
merken wieviel da tasächlich drinstehen musst du natürlich trotzdem.

von ich (Gast)


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.

von Rolf Magnus (Gast)


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.

von Martin Sche (Gast)


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!!

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.