Hi, wär nett, wenn mir jemand knapp erklären könnte, was es bei der Verwendung von eeprom (variablen) zu beachten gibt. Ich habe mich an das Tutorial gehalten, verstehe aber nicht genau, was der Compiler da für mich macht (es passiert jedenfalls nicht das, was ich erwartet habe). Definition global: uint16_t top EEMEM = 220; Was steht jetzt in der Variable, was steht im eeprom? Der Ausleseversuch schlägt fehl (~ergibt Quatsch): eeprom_read_word(&top) ergibt (ascii) "-1" Hat jetzt die Variable den Wert 220, und der Platz im eeprom ist noch gar nicht beschrieben? So ist es, avrdude hat das .eep gar nicht geschrieben.. Jetzt klappt's! Allerdings habe ich das eep mit WinAVR geschrieben, avrdude wollte nicht: loadpage instruction not defined for part "ATtiny2313" Was muß ich da machen?
#ifndef EEMEM #define EEMEM _attribute_ ((section (".eeprom"))) #endif Die obigen 3 Zeilen hast du im Code stehen?
> uint16_t top EEMEM = 220;
sagt dem Compiler dass er im separaten EEProm Speicher bitte 16 Bit (2
Bytes) für eine Variable mit dem Namen top reservieren soll. Zudem soll
in dem .hex-File für das EEProm (üblicherweise mit der Extension .eep)
für diese Variable der Wert 220 eingetragenm werden.
Falls du jetzt das Programm (.hex) und das .eep File auf den MC
programmierts kannst du mit eprom_read_word(&top) diesen Wert von 220
ins RAM/in ein Register holen. Mit eeprom_write_word() kannst du diesen
Wert überschreiben.
Kann man eigentlich mit EEMEM auch die Adresse im EEPROM angeben?? Geht darum, um komplette verschiedene Array's während des compilierens zu erzeugen; mir ist dabei halt mal aufgefallen, daß der Compiler durchaus auch mal die Reihenfolge vertauscht, z.B. unsigned char NAME[] EEMEM = {"ESELCHEN"}; unsigned char Message[] EEMEM = {"Hallo, Welt..."}; unsigned char Comment[] EEMEM = {"noch ne Zeile..."} können so liegen, wie der Compiler gerade "Lust" hat; er selbst weiß ja über die Namensauflösung die Adresse. Kann man da so eingreifen, daß das 1. Array z.B. an Adresse 0x10 beginnt, das 2. an Adresse 0x40 und das dritte an 0x60, damit man genau weiß (auch aus anderen Applikationen), wo man hinadressieren muß??
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.