www.mikrocontroller.net

Forum: Compiler & IDEs eeprom Verständnisfrage


Autor: Ich Bin (ichbin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wär nett, wenn mir jemand knapp erklären könnte, was es bei der
Verwendung von eeprom (variablen) zu beachten gibt.

Ich habe mich an das Tutorial gehalten, verstehe aber nicht genau, was
der Compiler da für mich macht (es passiert jedenfalls nicht das, was
ich erwartet habe). Definition global:

uint16_t top EEMEM = 220;

Was steht jetzt in der Variable, was steht im eeprom?

Der Ausleseversuch schlägt fehl (~ergibt Quatsch):

eeprom_read_word(&top) ergibt (ascii) "-1"

Hat jetzt die Variable den Wert 220, und der Platz im eeprom ist noch
gar nicht beschrieben?

So ist es, avrdude hat das .eep gar nicht geschrieben.. Jetzt
klappt's! Allerdings habe ich das eep mit WinAVR geschrieben, avrdude
wollte nicht:
loadpage instruction not defined for part "ATtiny2313"

Was muß ich da machen?

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#ifndef EEMEM
#define EEMEM _attribute_ ((section (".eeprom")))
#endif

Die obigen 3 Zeilen hast du im Code stehen?

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uint16_t top EEMEM = 220;

sagt dem Compiler dass er im separaten EEProm Speicher bitte 16 Bit (2
Bytes) für eine Variable mit dem Namen top reservieren soll. Zudem soll
 in dem .hex-File für das EEProm (üblicherweise mit der Extension .eep)
für diese Variable der Wert 220 eingetragenm werden.

Falls du jetzt das Programm (.hex) und das .eep File auf den MC
programmierts kannst du mit eprom_read_word(&top) diesen Wert von 220
ins RAM/in ein Register holen. Mit eeprom_write_word() kannst du diesen
Wert überschreiben.

Autor: Eselchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man eigentlich mit EEMEM auch die Adresse im EEPROM angeben??
Geht darum, um komplette verschiedene Array's während des compilierens
zu erzeugen; mir ist dabei halt mal aufgefallen, daß der Compiler
durchaus auch mal die Reihenfolge vertauscht, z.B.

unsigned char NAME[] EEMEM =
{"ESELCHEN"};
unsigned char Message[] EEMEM =
{"Hallo, Welt..."};
unsigned char Comment[] EEMEM =
{"noch ne Zeile..."}

können so liegen, wie der Compiler gerade "Lust" hat; er selbst weiß
ja über die Namensauflösung die Adresse.

Kann man da so eingreifen, daß das 1. Array z.B. an Adresse 0x10
beginnt, das 2. an Adresse 0x40 und das dritte an 0x60, damit man genau
weiß (auch aus anderen Applikationen), wo man hinadressieren muß??

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.