Forum: Mikrocontroller und Digitale Elektronik AVR GCC EEP-File mit Standardwerten versehen


von Myjestic (Gast)


Lesenswert?

Hi,

habe schon im Forum gesucht, aber nicht so richtig die Antwort auf mein 
Problem gefunden.

Ich habe mit AVR GCC einen Wert definiert:

uint8_t  ee_Endlage1_W EEMEM;

Kompilieren klappt prima. Auch ein EEP-File wird erzeugt.

Ich lade mein EEP und HEX mit MegaLoad hoch. Leider habe ich jetzt das 
Problem, dass ich nach dem neu kompilieren und flashen die unmöglichsten 
Werte für ee_Endlage1_W bekomme.

Ich würde gerne Standardwerte im EEP-File definieren. Habe auch schon 
versucht, die Zeile von oben folgendermaßen zu formulieren:

uint8_t  ee_Endlage1_W EEMEM=500;

Wenn ich wieder flashe und die Daten auslese kommt wieder nur murks 
raus. Das schreiben und lesen an sich funktioniert im Programm tadellos.
Nur die Zuweisung der Standardwerte nicht.

Was mache ich falsch?

von ... .. (docean) Benutzerseite


Lesenswert?

ein uint8 kann keine 500 darstellen.

von Myjestic (Gast)


Lesenswert?

Ist auch nur ein Beispiel, dann halt uint16_t.

von Jörg G. (joergderxte)


Lesenswert?

eeprom_read_...() bzw. eeprom_write...() vergessen? (Du kannst auf die 
EEMEM Variablen nicht einfach so zugreifen).

Und antworte jetzt nicht mit: "Natürlich nicht!!!1111elf" - du hast kaum 
sinnvolle Informationen zu deinem Programm gepostet.

scnr, Jörg

ps.: Vielleicht brauchst du auch nur mal nach der EESAVE-Fuse zu sehen

von Myjestic (Gast)


Lesenswert?

Ich schrieb: "Das schreiben und lesen an sich funktioniert im Programm 
tadellos."

Also ja, ich habe die von Dir genannte lib Funktionen verwendet. Wenn 
ich Werte in den EEPROM schreibe (mittels UART Befehlen) und dann wieder 
auslese funktioniert alles bestens. Sobald ich aber meine Software neu 
kompiliere und flashe haut es die gespeicherten Werte durcheinander.

Ich denke mittlerweile auch das bei den FuseBits oder dem MegaLoad was 
nicht hinhaut.  Dem werde ich mal nachgehen. Danke trotzdem.

von muetze1 (Gast)


Lesenswert?

Beim flashen wird das Device gelöscht und somit auch der EEPROM. Somit 
u.a. bei AVR Studio dran gedacht das EEP File anzugeben und nach dem 
flashen auch noch den EEPROM zu beschreiben?

von spess53 (Gast)


Lesenswert?

Hi

>Beim flashen wird das Device gelöscht und somit auch der EEPROM.

Nicht unbedingt. EESAVE-Fuse setzen und der EEPROM-Inhalt bleibt beim 
Löschen erhalten.

MfG Spess

von Myjestic (Gast)


Lesenswert?

Es lag wohl am Megaload.

Ich habe den Bootloader jetzt rausgehauen und flashe den µC über das 
STK500 und AVRStudio. Da gibt es keine Probleme. Gibt sogar noch 
zusätzliche Vereinfachungen, ich packe jetzt EEP, HEX und FuseBits in 
ein ELF-File und lade alle gleichzeitig hoch. Kannte ich noch gar nicht, 
ist recht hilfreich.

Achso, Brown-Out habe ich noch gesetzt, aber ich denke mal das hat damit 
nicht so viel zu tun.

von Myjestic (Gast)


Lesenswert?

Ein Frage hätte ich allerdings noch.

Die Standardwertzuweisung der EEPROM Werte funktioniert einwandfrei. 
Z.B.:
uint8_t    EEMEM  ee_Endlage1_W=0;

Das Ganze wird im EEP-File abgelegt und wenn ich es wie oben beschrieben 
flashe, habe ich "0" auch als Startwert.

Habe ich allerdings ein Array, funktioniert das nicht:
uint8_t  EEMEM  ee_Belegungsint_W[]="1,2,3,4,5,6,7,8,9,10,11,12";

Das sind die Werte sonstwas nur nicht die, die ich als Standard 
definiert habe.

Hat da jemand eine Idee?

von Stefan E. (sternst)


Lesenswert?

Myjestic schrieb:

> Habe ich allerdings ein Array, funktioniert das nicht:
> uint8_t  EEMEM  ee_Belegungsint_W[]="1,2,3,4,5,6,7,8,9,10,11,12";
>
> Das sind die Werte sonstwas nur nicht die, die ich als Standard
> definiert habe.

Lass mich raten, die "sonstwas-Werte" sind 49, 44, 50, 44, 51, 44, ...

Wenn du eigentlich die Werte 1, 2, 3, ... erwartet hast, musst du die 
Anführungszeichen durch geschweifte Klammern ersetzen.

von egberto (Gast)


Lesenswert?

uint8_t  ee_Belegungsint_W[] EEMEM ={1,2,3,4,5,6,7,8,9,10,11,12};

so sollte es gehen.....eventuell noch explizit in de eckigen Klammer die 
Größe angeben...kann gerade nicht testen..


egberto

von Myjestic (Gast)


Lesenswert?

Ups! Shame on me!

Muss heißen:
uint8_t  EEMEM  ee_Belegungsint_W[]={1,2,3,4,5,6,7,8,9,10,11,12};

Bestens, jetzt geht alles.

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.