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


von Marian (Gast)


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

von inoffizieller WM-Rahul (Gast)


Lesenswert?

uint16_t EEMEM array[512] = {...};

... = 512 16bit Werte.

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

von johnny.m (Gast)


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.

von Marian (Gast)


Lesenswert?

Ja es ist vorher definiert. Ok dann werde ich das mal testen!

Schönen Danke schonmal :)

von Marian (Gast)


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.

von Marian (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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

von Marian (Gast)


Lesenswert?

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


Hab mir jetzt die neue gezogen und reingeschmissen :)

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.