Forum: Mikrocontroller und Digitale Elektronik Werte ins EEPROM schreiben und lesen


von Klaus (Gast)


Lesenswert?

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?

von Frickelfritze (Gast)


Lesenswert?

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.

von Wolfram K. (wolees)


Lesenswert?

Hallo Klaus,
dein "Wert1" muss vom Typ uint sein oder du musst entsprechend wandeln.
Die 3 muss auch ein Pointer sein.
eeprom_write_byte (uint8_t *__p, uint8_t __value)

Gruss
Wolfram

von interessent (Gast)


Lesenswert?

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

von Frickelfritze (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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!

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.