Forum: Compiler & IDEs EEPROM Begriffe Erklärung


von Marie B. (marie93)


Lesenswert?

Hallo Friendzzz,

ich brauch wieder eure Hilfe.


>>>>>>>>>Kann mir jemand die folgenden Zeilen erklären. Was bedeutet EEMEM?

#ifndef EEMEM
// alle Textstellen EEMEM im Quellcode durch _attribute_ ... ersetzen
#define EEMEM  _attribute_ ((section (".eeprom")))
#endif

>>>>>>>>Das hier verstehe ich....

#define   EESIZE   512      // Maximale Größe des EEPROMS
#define   EE_DUMMY   0x000  // Dummyelement (Adresse 0 sollte nicht 
genutzt werden)
#define   EE_VALUE1  0x001  // Eine Bytevariable
#define   EE_WORD1L  0x002  // Eine Wordvariable (Lowbyte)
#define   EE_WORD1H  0x003  // Eine Wordvariable (Highbyte)
#define   EE_VALUE2  0x004  // Eine weitere Bytevariable

>>>>>>>Was bedeutet genau "ee_mem[EESIZE] EEMEM"?

unsigned char ee_mem[EESIZE] EEMEM =
{
   [EE_DUMMY]   = 0x66,
   [EE_VALUE1]  = 0x05,
   [EE_WORD1L]  = 0x01,
   [EE_WORD1H]  = 0x00,
   [EE_VALUE2]  = 0xFF
};


Ich hab schon im Tutorial gelesen. Leider versteh ich es nicht 
wirklich...

Mein folgendes Ziel ist es, ein Array vom wert integer in den EEPOR zu 
laden und auch wieder auslesen zu können. Falls ihr mir hier zu auch 
noch Tipps oder Code zeigen könnt, wäre super. Gerade will ich erst mal 
den EEPROm verstehen.

Eure Marie93

: Verschoben durch Admin
von Tilo (Gast)


Lesenswert?

Das steht doch schon fast alles da. Variablen denen das EEMEM vorgesetzt 
wird, werden in der Section .eeprom gespeichert.
Ich vermute in dem Linker Skript wird diese Sektion auf den Adressraum 
eines EEProms zeigen, sprich die Variablen sollten einen Reset 
überleben.

von Oliver (Gast)


Lesenswert?

Genaugenommen steht alles hier:
1
#ifndef EEMEM
2
// alle Textstellen EEMEM im Quellcode durch _attribute_ ... ersetzen
3
#define EEMEM  _attribute_ ((section (".eeprom")))
4
#endif

Hängt man "_attribute_ ((section (".eeprom")))" an eine Variable bei der 
Deklaration an, sagt das Compiler und dem Linker mit, daß die Variable 
in der Speichersektion ".eeprom" anzulegen ist. Die WinAVR-Linkerscripts 
sorgen dann dafür, daß die Variable dann im EEPROM landet.

Weil das aber so umständlich und lang ist, gibt es halt ein define mit 
dem Namen EEMEM. Das lässt sich halt schneller tippen.

Funktion und Bedeutung von "#define" und den zugehörigen 
Preprozessoranweiseungen finden sich in jedem anständigen C-Buch.

Oliver

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.