www.mikrocontroller.net

Forum: GCC AVR tiny44a: Reihenfolge abgelegter Daten im EEPROM hat sich umgekehrt


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Martin (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

ich habe seit dem Umstieg vom AVR-Studio 5.1 zum Atmel Studio 6
folgendes kleines Problem:

Mit dem Wechsel der in der originalen Installation mitgelieferten
AVRGCC von 3.3.1.27 auf 3.4.0.65 im Atmel Studio 6 sind meine im
EEPROM abgespeicherten Werte nicht mehr an derselben Adresse.

Kurz zur Erklärung:

Waren die Werte in 5.1 in der Reihenfolge Wert1,Wert2,Wert3 gespeichert,
sind sie jetzt in Version 6 in folgender Reihenfolge Wert3,Wert2,Wert1.

Die Werte werden über die Funktion eeprom_write_byte() im EEPROM
abgelegt.

Da ich noch relativ neu in der Atmel-Programmierung bin, halten sich
meine DEBUG-Kenntnisse noch sehr in Grenzen.


Über einen Lösungsansatz würde ich mich sehr freuen.

Vielen Dank
Gruß Martin

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Martin schrieb:
> Hallo,
>
> ich habe seit dem Umstieg vom AVR-Studio 5.1 zum Atmel Studio 6
> folgendes kleines Problem:
>
> Mit dem Wechsel der in der originalen Installation mitgelieferten
> AVRGCC von 3.3.1.27 auf 3.4.0.65 im Atmel Studio 6 sind meine im
> EEPROM abgespeicherten Werte nicht mehr an derselben Adresse.
>
> [...]
>
> Da ich noch relativ neu in der Atmel-Programmierung bin, halten sich
> meine DEBUG-Kenntnisse noch sehr in Grenzen.

Das hat nix mit Atmel oder AVR oder AStudio tu tun sondern mit C.

Nirgends wird gesagt, daß bei Definitionen

int a;
int b;
int c;

Die Variablen in dieser Reihenfolge im Speicher stehen sollen oder 
müssen.

Lösung:

Leses die Variablen über ihre Adressen:

eeprom_read_byte (&a);

Wenn ein spezifischen Layout benötigt wird, dann

typedef struct
{
    int a, b, c;
} abc_t;

abc_t abc EEMEM;

eeprom_read_byte (&abc.a);

eeprom_read_block (&abc_im_ram, &abc, sizeof (abc));

Autor: Martin (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich glaube ich hab meinen Denkfehler gefunden.

Das Auslesen der Daten im Atmel hat mit der Verarbeitung über die
Adresse in Form von

eeprom_read_byte (&a);

bei mir schon funktioniert.


Da ich allerdings das EEPROM-Speicherabbild ausgelesen, per Hand
im Editor verändert, und dann zurück in den Atmel geschrieben habe,
hatte ich auf einmal die Werte an anderer Stelle stehen.

Ich versuche jetzt die Daten mit Angabe der direkten EEPROM-
Adresse zu speichern.

Damit weiß ich definitiv wo die Daten im EEPROM stehen und kann
diese dann im Editor ändern und zurückschreiben.


Gruß
Martin

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net