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
uint16_t EEMEM array[512] = {...}; ... = 512 16bit Werte. eeprom_write_block sollte in der lib-c-Doku beschrieben sein.
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.
Ja es ist vorher definiert. Ok dann werde ich das mal testen! Schönen Danke schonmal :)
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.
Ah...habs hinbekommen. Muss ja das EEMEM vorher noch definieren! Zu früh geschrieben :(...sorry!
Weiß nicht, was Du für eine libc-Version hast, aber bei mir ist EEMEM in der eeprom.h definiert...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.