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

Eine eigene Frage? Dieser Thread ist über 21 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.