www.mikrocontroller.net

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


Autor: Martin Sche. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: fb (Gast)
Datum:

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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Sche (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.