Forum: Compiler & IDEs Text in eeprom


von Bert (Gast)


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

von mthomas (Gast)


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.

von Bert (Gast)


Lesenswert?

Danke für den hinweis.
eine .epp-Datei wird ja erzeugt, aber ohne inhalt. Wie kann ich sie mit
inhalt erzeugen lassen ?

von mthomas (Gast)


Lesenswert?


von Bert (Gast)


Lesenswert?

Glaub ich bin zu blöd dafür !!!
Aber dennoch danke für eure antworten

von gaston (Gast)


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

von Werner B. (Gast)


Lesenswert?

Zitat mthomas vom 21.04.2005 19:29

Welche Fragen laesst
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM
offen?

von Markus M. (seeadler78)


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

von johnny.m (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von johnny.m (Gast)


Lesenswert?

Sehe grad, habe oben den Variablentyp vergessen. Muss natürlich heißen
unsigned char EEMEM text[]={'T','O','O','R','\0'};
bzw.
unsigned char EEMEM text[]="TOOR";

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.