Forum: Compiler & IDEs eeprom Verständnisfrage


von Ich B. (ichbin)


Lesenswert?

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?

von micro1 (Gast)


Lesenswert?

#ifndef EEMEM
#define EEMEM _attribute_ ((section (".eeprom")))
#endif

Die obigen 3 Zeilen hast du im Code stehen?

von Werner B. (Gast)


Lesenswert?

> 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.

von Eselchen (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.