AVR tiny44a: Reihenfolge abgelegter Daten im EEPROM hat sich umgekehrt

Gast #2672898
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
Persönliche Seite #2672928
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));
Gast #2673251
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.