EEPROM Data, geht das so nicht oder hat der Debugger ein Bug?

Gast #1571801
Lesenswert?
• ▲
▼
Hallo,

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

5
static char EEMEM dummy = 0xAA;
6
static ee_data_t EEMEM standard = {13604, 0.1, 100, FALSE, TRUE, FALSE};
7
static bool_t EEMEM used[EE_DATA_COUNT];
8
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.
Persönliche Seite #1571834
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-Tutorial#EEPROM-Speicherabbild_in_.eep-Datei

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.
Gast #1571843
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.
Gast #1571893
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?
Persönliche Seite #1571909
Lesenswert?
• ▲
▼
Also einfacher als bei
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Bekannte_Probleme_bei_den_EEPROM-Funktionen 
?

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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.