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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren