mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom AVR: Arrays im EEPROM speichern und auslesen!


Autor: bimbo385 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe 5 Arrays von 1 bis 18. 4 Davon sind Byte Arrays und das 5. 
besteht aus Word Variablen.

Diese Arrays muss ich am Ende von meiner Setup Routine in den EEPROM 
schreiben und beim Start des µC auslesen.




Ich habe folgendes versucht:

Am Start des Programms:

Readeeprom On_hour(1) , Eon_hour

For Temp = 2 To 18
   Readeeprom On_hour(temp)
Next


Readeeprom On_min(1) , Eon_min

For Temp = 2 To 18
   Readeeprom On_min(temp)
Next


Readeeprom On_day(1) , Eon_day

For Temp = 2 To 18
   Readeeprom On_day(temp)
Next


Readeeprom On_wait(1) , Eon_wait

For Temp = 2 To 18
   Readeeprom On_wait(temp)
Next


Readeeprom On_dimm(1) , Eon_dimm

For Temp = 2 To 18
   Readeeprom On_dimm(temp)
Next




Am Ende des Setups:


Writeeeprom On_hour(1) , Eon_hour

   For Temp = 2 To 18
      Writeeeprom On_hour(temp)
   Next


   Writeeeprom On_min(1) , Eon_min

   For Temp = 2 To 18
      Writeeeprom On_min(temp)
   Next


   Writeeeprom On_day(1) , Eon_day

   For Temp = 2 To 18
      Writeeeprom On_day(temp)
   Next


   Writeeeprom On_wait(1) , Eon_wait

   For Temp = 2 To 18
      Writeeeprom On_wait(temp)
   Next


   Writeeeprom On_dimm(1) , Eon_dimm

   For Temp = 2 To 18
      Writeeeprom On_dimm(temp)
   Next



Der EEPROM Bereich:

$eeprom
$eepromhex

   Eon_hour:
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
0 , 0
   Eon_min:
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
0 , 0
   Eon_day:
   Data 127 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 127 , 0 , 0 , 0 , 0 , 0 , 
0 , 0 , 0
   Eon_wait:
   Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
0 , 0
   Eon_dimm:
   Data 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 
0% , 0% , 0% , 0% , 0%

$data






Das Problem ist, dass das mit den For Next Schleifen nicht funktioniert, 
weil er für die successive Erhöhung des Read bzw. Writeeeprom befehls 
einen Pointer verwendet, der bei Schleifen nicht funktioniert.

Nur will ich nicht (und kann ich auch nicht wegen dem knappen Speicher) 
90 Read- und writeeeprom Befehle schreiben.


Kennt da lemand einen Trick, wie ich ein ganzen Array in den EEPROM und 
wieder Hinnaus bekomme?


Danke schonmal!

Autor: weinbauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dim byte_array (18) as eram byte
dim word_array (18) as eram word

und schon kannst Du jede beliebige Zelle abfragen, ändern etc.
einfach durch

xxxxx = byte_array(y)

oder

byte_array(y) = xxxxx

Autor: mue_C (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es spricht auch nichts dagegen, bei jedem Lese- bzw. Schreibbefehl die 
Position anzugeben. Also so:
EE_ptr = Eon_hour
For Temp = 1 To 18
   Readeeprom On_hour(temp), EE_ptr
   Incr EE_ptr
Next
For Temp = 1 To 18
   Readeeprom On_min(temp), EE_ptr
   Incr EE_ptr
Next
usw.

Autor: bimbo385 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JO Danke für den Tip!

Habe es mittlerweile mit ERAM Variablen als Array gelöst, funktioniert 
auch wunderbar.


Nochmal Danke!

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.