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
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.
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
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
@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...
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.
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";