1024 Byte großes Array ins EEPROM schreiben

Gast #411648
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
Gast #411650
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.
Gast #411652
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.

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