Text in eeprom

Gast #181315
Lesenswert?

HI,

Wer kann mir mit dem eeprom helfen ? ich habe von keine ahnung, da ich
es noch nie brauchte. Habe schon einige tutorials gelesen, aber bin
nicht damit klar gekommen bzw. es wurde drüber kein wort verloren...
ich nutze einen atmega32 bzw. at2313 zum testen und schreibe in C mit
WinAVR

Mein Problem ist:
Ich will einen festen ASCII-text für ein LCD in den eeprom schreiben,
da er im flash nur platz verschwendet. wird ja nur gelegentlich
benötigt.
aber ich habe keine ahnung wie ich mir eine eeprom-datei erzeugen kann,
wo dies drinnen steht. angeblich soll man dies über eine
compileranweisung machen können, aber nur wie ?
kann mir jemand von euch bei diesem problem helfen ?

Danke

MfG
Bert
Gast #181316
Lesenswert?

Keine "Compileranweisung", sondern ein Aufruf von (avr-)objcopy mit
entsprechenden Parametern, welche die Daten aus der "Section eeprom"
in eine hex-Datei umwandelt. Wenn das Makefile der WinAVR/MFile-Vorlage
entspricht, wird beim "make all" eine .epp-Datei erzeugt.
Gast #181320
Lesenswert?

hallo ihr beiden.
die Lösung des besagten Problems würde mich eigentlich auch
interessieren. Es ist ja mit assebler (AVRstudio) möglich, über eine
.eseg - Tabelle die .eep datei mit daten zu füllen, und über das Label
wieder abzurufen.
z.B.
.eseg
text1:  .db   "Text fürs LCD"
text2:  .db  "blablalolol ja"
usw.

ist sowas auch mit WinAVR möglich?
danke, mfg gaston
#181322
Lesenswert?

Hallo
Man kann den Text folgendermasen in das EEPROM legen.

const unsigned char _attribute_ ((section (".eeprom")))
text[]={'T','O','O','R'};

const unsigned char                     // gibt den Datentyp an
_attribute_ ((section (".eeprom")))   // ins EEPROM
text[]={'T','O','O','R'};               // Variable die ins
EEPROM soll

bis dann
Gast #181323
Lesenswert?

@Markus:
1. Ich glaube kaum, dass dem Thread Opener nach mehr als einem Jahr
diese Information noch was bringt. Wenn er sein Problem nicht
mittlerweile selbst gelöst hat, ist ihm wohl nicht mehr zu helfen!

2. Für _attribute_ ((section (".eeprom"))) gibt es in der libc
extra eine Kurzschreibweise, nämlich EEMEM. Dadurch wird das Ganze viel
übersichtlicher.

3. Wenn Du einen Text so ablegst, bekommst Du mit einiger
Wahrscheinlichkeit Probleme, wenn Du ihn über eine
String-Ausgabe-Funktion ausgeben willst. ASCII-Strings werden
eigentlich grundsätzlich mit abschließendem Nullterminator gespeichert,
damit man weiß, wo der String zu Ende ist. Also wenn, dann so:
EEMEM text[]={'T','O','O','R','\0'};
Und den String kann man auch einfacher schreiben:
EEMEM text[]="TOOR";
...und das hat den angenehmen Nebeneffekt, dass man sich keine Gedanken
über den Nullterminator machen muss...
Moderator Persönliche Seite #181324
Lesenswert?

Ganz davon abgesehen, halte ich die Begründung für die Benutzung
des EEPROMs für nicht sehr sinnvoll: der ist teurer als der RAM
(und folglich ist davon weniger da).  Hätte also eigentlich nur
Sinn, wenn der Flash sowieso schon voll ist, aber im EEPROM noch
Platz.

Weiterer Vorteil von Strings im Flash ist, dass es bereits einige
Funktionen gibt, damit man auf diese einfach zugreifen kann.  Beim
EEPROM macht man das auch alles selbst.

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