Werte ins EEPROM schreiben und lesen

Gast #4591664
Hallo Liebe Gemeinde!

Ich hoffe mir kann jemand bei folgendem Verständnis problem helfen.

Vor ab ich benutze Atmel Studio 7.
AVR µC Attiny 85.

Ich möchte ein paar Werte ins EEPROM ablegen und wieder lesen.
Dazu verwende ich die eeprom.h.

Als Beispiel Speichere ich einen Wert
ab der Adresse 3 ins EEPROM mit folgenden Aufruf:

eeprom_write_byte(3,Wert1);

Nach dem Compilieren kommt folgente Warnung:
expected 'const uint8_t *' but argument is of type 'int'
Klickt ich auf diese Warnung springt er in die folgende Zeile in 
eeprom.h.

** \ingroup avr_eeprom
    Write a byte \a __value to EEPROM address \a __p.
 */
void eeprom_write_byte (uint8_t *__p, uint8_t __value);

Hier scheine ich bei meinem Aufruf irgend einen Fehler zu machen aber 
welchen?
Gast #4591666
Klaus schrieb:
> Hier scheine ich bei meinem Aufruf irgend einen Fehler zu machen aber
> welchen?

Indem du nicht darauf Rücksicht nimmst welche Variablentypen
du der Funktion eeprom_write_byte übergeben musst.

Ein Tipp: ein * bedeuted oft so etwas wie Pointer auf etwas.
Gast #4591696
interessent schrieb:
> welchen höheren sinn hat es hier die eeprom addresse als Pointer mit zu
> geben

Weil nun mal eine Adresse "eher" einen Pointer als einen
Wert darstellt.

Wenn du eine Reihe von Variablen im EEPROM ablegst kannst du
dir nur schwer den aktuellen numerischen Offset einer bestimmten
Variablen ermitteln (ja, mit mühsamen Abzählen wäre das möglich).
Gibst du dagegen die Adresse einer Variablen an macht das der
Compiler automatisch richtig für dich.
Gast #4591698
interessent schrieb:
> welchen höheren sinn hat es hier die eeprom addresse als Pointer mit zu
> geben
Ein Zeiger in einen Speicherbereich ist ein Pointer.
Selbst wenn du die Adresse "anders betrachtest", bleibt sie doch eine 
Adresse und damit sinngemäß ein Pointer/Zeiger.
Gast #4591700
Vielen Dank an Alle!

Ich habe mich nochmal mit dem Toutorial beschäftigt.

interessent schrieb:
> welchen höheren sinn hat es hier die eeprom addresse als Pointer mit zu
> geben und nicht als Value?

Also der höhere Sinn, so hab ich es begriffen, liegt darin das
EEMEM die abelegten Werte verwaltet.
Also man muss sich nicht selber um die Adresse der abgelegten Werte 
kümmern.

Ansprechen der Adressen sollte also über Variablen gehen und EEMEM sorgt
dafür, das es an der richtigen stelle im EEPROM gespeichert wird.



Wolfram K. schrieb:
> dein "Wert1" muss vom Typ uint sein oder du musst entsprechend wandeln.
> Die 3 muss auch ein Pointer sein.

Habe es jetzt so wie im Tutorial gemacht.


Jetzt sind auch die Warnungen weg!

Nochmals Danke!

Antwort schreiben

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