mikrocontroller.net

Forum: Compiler & IDEs 1024 Byte großes Array ins EEPROM schreiben


Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich nutze WinAVR, das AVR-Studio, den GCC-Compiler und habe eine Frage
zum Thema EEPROM.

Ich habe ein Array(uint16_t array[512]) was insgesamt 1024 Byte groß
ist. Das liegt normalerweise im RAM aber ich möchte es gerne ins EEPROM
schreiben, da ich keine Platz mehr auf meinem Atmega32(nur 2KByte) habe.
Diese Array liegt in einer Headerdatei und wird vom restlichen Programm
genutzt. Nun zu meiner Frage: Wie stelle ich es an, dass dieses Array
anstatt im Ram ins EEPROM verschoben wird und auch der Rest des
Programms dann auf das EEPROM zugreift wenn das Array benötigt wird?
Ich weiss, dass ich die avr/eeprom.h nutzen müsste und dann
wahrscheinlich auch die Funktion write_block:

eeprom_write_block(myArray,eeFooByteArray1,sizeof(myArray));

Ich verstehe leider nicht was der 2. Übergabewert ist, also das
eeFooByteArray1.

Kann ich nun mit dieser Funktion einfach so dieses Array ins EEPROM
schreiben und das Programm "weiss" dann auch das es dort ist?
Wisst ihr ungefähr was ich meine? Nochmal kurz erklärt :
Ich möchte halt das mein Array anstatt im RAM im EEPROM steht und ich
es genauso nutzen kann, als würde es im RAM sein.

Gruß,

Marian

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint16_t EEMEM array[512] = {...};

... = 512 16bit Werte.

eeprom_write_block sollte in der lib-c-Doku beschrieben sein.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das Array vorab definiert und konstant oder wird es erst zur
Programmlaufzeit erzeugt?

Im ersten Fall lässt es sich direkt definieren mit

uint16_t EEMEM MyArray[] = {Wert0, Wert2, ..., Wert511};

Andernfalls, also wenn es erst zur Programmlaufzeit erzeugt wird, mit
"uint16_t EEMEM MyArray[512];" deklarieren und anschließend im
Programm mit eeprom_write_word (uint16_t *addr,uint16_t value) z.B. in
einer Schleife die Werte der Reihe nach rüberschieben.

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja es ist vorher definiert. Ok dann werde ich das mal testen!

Schönen Danke schonmal :)

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe es nun getestet aber irgendwas stimmt an dem EEMEM nicht.
Sobald ich das vor das Array schreibe kommen folgende Fehlermeldungen:

./fft.h:13: error: parse error before "MyArray"
./fft.h:13: warning: type defaults to `int' in declaration of
`MyArray'
./fft.h:143: warning: data definition has no type or storage class

Die aavr/eeprom.h habe ich included.

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah...habs hinbekommen. Muss ja das EEMEM vorher noch definieren! Zu früh
geschrieben :(...sorry!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß nicht, was Du für eine libc-Version hast, aber bei mir ist EEMEM in
der eeprom.h definiert...

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ich gerade gemerkt habe, anscheinend eine etwas ältere (vom
13.01.05) :)


Hab mir jetzt die neue gezogen und reingeschmissen :)

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.