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.
Danke für den hinweis. eine .epp-Datei wird ja erzeugt, aber ohne inhalt. Wie kann ich sie mit inhalt erzeugen lassen ?
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
Zitat mthomas vom 21.04.2005 19:29 Welche Fragen laesst http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM offen?
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";
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.