mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM Data, geht das so nicht oder hat der Debugger ein Bug?


Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte gerne eine Standardkonfiguration fest ins EEPROM schreiben. 
Dafür habe ich folgendes geschrieben.
#ifndef EEMEM
  #define EEMEM  __attribute__ ((section (".eeprom")))
#endif

static char EEMEM dummy = 0xAA;
static ee_data_t EEMEM standard = {13604, 0.1, 100, FALSE, TRUE, FALSE};
static bool_t EEMEM used[EE_DATA_COUNT];
static ee_data_t EEMEM eedata[EE_DATA_COUNT];

Müsste durch das Attribut EEMEM die Strukturen nicht direkt ins EEPROM 
geschrieben werden oder muss ich die noch extra über 
eeprom_write_block(...) schreiben?

Im AVR Studio 4 Debugger wird mir jedenfalls angezeigt das nur lauter 
0en im EEPROM stehen.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee, du musst nach dem Kompilieren das Datenfile mit den EEPROM Daten in 
das EEPROM deinen AVR schreiben. Z.B. mit dem ISP-Programmer.

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Beim Simulieren müsste eigentlich der Simulator fragen, ob er das 
vorhandene Datenfile mit den EEPROM Daten laden soll.

Nur 0en im EEPROM kann ich mir nicht erklären. In einem gelöschten 
EEPROM sollten dort 0xFF stegen.

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> Beim Simulieren müsste eigentlich der Simulator fragen, ob er das
> vorhandene Datenfile mit den EEPROM Daten laden soll.

Das fragt er auch und ich sage ihm er soll es laden.

Stefan B. schrieb:
> Nur 0en im EEPROM kann ich mir nicht erklären. In einem gelöschten
> EEPROM sollten dort 0xFF stegen.

Ja ich meinte damit in dem von mir genutzen Bereich. Die ersten 88,8% 
sind komplett 0 und am Ende steht 0xFF.


Also ist es ein Bug vom Simulator, dass dieser die Daten nicht ins 
EEPROM läd? Werde natürlich später, wenn ich den µC zur Hand habe, 
testen ob die Daten auch wirklich geschriben wurden. Erstmal hab ich 
aber nur den Simulator.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, Daten sind drin, jedenfalls teilweise.

> static bool_t EEMEM used[EE_DATA_COUNT];
> static ee_data_t EEMEM eedata[EE_DATA_COUNT];

sind ja mit 0 initialisiert.

Die Position des EEMEM in der Definition der Variablen stimmt aber 
nicht. Siehe im Link oben, wie das dort gemacht wird.

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke funktioniert jetzt soweit. Hab das EEMEM an die richtige Stelle 
gepackt und eine fehlende Funktion implementiert. Der Compiler hat die 
Struktur "standard" wohl wegoptimiert.

Gibt es einen Weg gezielt eine EEMEM Variable auf eine bestimtme Adresse 
zu legen, ohne gleich die komplette Adressierung selbst zu machen?

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Es lebe das Tutorial.
Und Du solltest #inlcude <avr/eeprom.h> nutzen statt irgednwas per Hand 
zu biegen.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also einfacher als bei
http://www.mikrocontroller.net/articles/AVR-GCC-Tu... 
?

Brute-Force #1: Hilfsprogramm für AVR schreiben, das das EEPROM füllt, 
Laufenlassen (real oder im Simulator), Auslesen, beim richtigen Programm 
verwenden.

Brute-Force #2: Hilfsprogramm für PC schreiben, das ein Binärfile 
schreibt mit dem EEPROM Inhalt, mit objcopy in EEPROM-File umwwandeln, 
beim richtigen Programm verwenden.

Brute-Force #3: Mit einem HEX-Editor EEPROM Inhalt in ein Binärfile 
poken, mit objcopy in EEPROM-File umwwandeln, beim richtigen Programm 
verwenden.

Brute-Force #4: Mit einem TEXT-Editor EEPROM Inhalt direkt in dem 
EEPROM-File ändern, Checksummen korrigieren, beim richtigen Programm 
verwenden.

...

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.