Forum: Compiler & IDEs AVR tiny44a: Reihenfolge abgelegter Daten im EEPROM hat sich umgekehrt


von Martin (Gast)


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

von Johann L. (gjlayde) Benutzerseite


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));

von Martin (Gast)


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

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.