Forum: Mikrocontroller und Digitale Elektronik EEPROM auslesen


von Tobias Zahn (Gast)


Angehängte Dateien:

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

von Christian Zietz (Gast)


Lesenswert?

Welcher uC? Welcher Compiler?

von Tobias Zahn (Gast)


Lesenswert?

Contoller: AT90S8515
Codevision Compiler

von Christian Zietz (Gast)


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

von Peter Dannegger (Gast)


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

von Tobias Zahn (Gast)


Angehängte Dateien:

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?

von Peter Dannegger (Gast)


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

von Tobias Zahn (Gast)


Lesenswert?

ich versteh trotzdem net wie ich das im Codevision machen muss, hat
vllt. einer nen Link oder so dazu?
Ich find leider nix :-(

Weil ne Adresse zuweißen tu ich eigendlich... :/

Tobias

von Peter Dannegger (Gast)


Lesenswert?

"Weil ne Adresse zuweißen tu ich eigendlich... :/"

wo denn ?


ptr_to_eeprom = DieAdresseVonDerIchLesenWill;

DieVariable = *ptr_to_eeprom; // und nun lese ich


Peter

von Tobias Zahn (Gast)


Angehängte Dateien:

Lesenswert?

hi!
Danke, jetzt funktioniert es scheinbar...

Tobias

von chose (Gast)


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

von chose (Gast)


Lesenswert?

Adresszuweisungen sollten so aussehen:

ptr_to_eeprom  =  &tmp[0];      //Was soll tmp sein ?

Literaturtip: C für Mikrocontroller, Burkhard Mann


SG

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.