mikrocontroller.net

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


Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein uint8 kann keine 500 darstellen.

Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist auch nur ein Beispiel, dann halt uint16_t.

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: muetze1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: egberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.