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