EEPROM auslesen

Gast #175282
Lesenswert?

hallo!
Die Funktion aus dem Anhang soll pro Schleifendurchlauf zwei int Werte
aus dem EEPROM holen und an die Funktion übergeben.
Das macht sie aber nicht, warum verstehe ich nicht :-(

Danke schonmal für eure Hilfe
Tobias
Angehängte Dateien:
Gast #175285
Lesenswert?

Irgendwie ergibt Dein C-Code keinen Sinn:

         *ptr_to_eeprom=tmp;
         length = *ptr_to_eeprom;

Das schreibt zunächst tmp ins EEPROM (dahin wo auch immer ptr_to_eeprom
gerade hinzeigt) und liest daraufhin length von der Stelle aus dem
EEPROM, wo Du gerade tmp hingeschrieben hast. Gleich darauf machst Du
sowas nochmal.

Christian
Gast #175286
Lesenswert?

"... warum verstehe ich nicht :-("


Weil Du das Datenblatt nicht gelesen hast !!!


Du kannst noch so lange einen Pointer ptr_to_eeprom nennen, er zeigt
trotzdem stur ins SRAM !


Also ab und erstmal das Datenblatt gelesen.
In den neueren (ATMega8515) sind sogar fix und fertige C-Beispiele.


Peter
Gast #175287
Lesenswert?

hallo!
Ich hab das Beispiel aus der Codevision - Hilfe verwendet, ich dachte
nicht, dass das nicht geht.
Die neue Funktion ist im Anhang (gebastelt aus dem Datenblatt) sie
meldet:
undefined symbol EEWE und EERE

was muss ich machen, damit das tut?
Angehängte Dateien:
Gast #175288
Lesenswert?

"Ich hab das Beispiel aus der Codevision - Hilfe verwendet"


Sorry, hatte das "Codevision" übersehen.

Wenns da so steht dann sollte es ja auch gehen.


Beim AVR-GCC muß man es so machen, wie im Datenblatt (io.h includieren)
oder die Macros aus eeprom.h benutzen.

Beim ACR-GCC zeigen Pointer immer in den SRAM, Ausnahme
Funktionspointer, die zeigen ins Flash.

Der Codevision hat eine nicht dem C-Standard entsprechende Erweiterung,
(eeprom *) zeigt dann wohl wirklich in den EEPROM, aber eben nur beim
Codevision.

Du must aber auf alle Fälle dem Pointer ptr_to_eeprom eine Adresse
zuweisen, sonst gehts in den Wald.



Peter
Gast #175292
Lesenswert?

Würde mit Codevision nicht mittels Pointer aufs EE zugreifen.
Besser gehts mit einem Array. Da brauchst keine Adressen usw.
Das Problem ist, dass du mit int-Pointern nur auf int-Werten zugreifen
kannst.

char Temp;
char  eeprom Stm_Sp[500];     //Array für 500 EE-Bytes


Temp = Stm_Sp[2];            //Liest den 2. Wert aus dem EE-Array
Stm_Sp[2] = 12;              //schreibt 12 in das EEprom.

SG chose

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren