www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 'eeprom_read_byte' makes pointer from integer..


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie der Betreff vermuten lässt hab ich ein Porblem mit dem lesen und 
schreiben von Bytes in das EEPROM. Und zwar wollte ich über defines die 
EEPROM Adresse der verschiedenen Parameter die ich im speichern 
festlegen:
#define   par1   0x001

Jetzt würde ich gerne mit:
test = eeprom_read_byte(par1);

den Wert aus dem EEPROM auslesen. Das funktioniert auch soweit, leider 
gibt es eine Warnung:

../main.c:22: warning: passing argument 1 of 'eeprom_read_byte' makes 
pointer from integer without a cast

Lässt sich das beheben?

Vielen Dank
Jan

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan schrieb:
> Lässt sich das beheben?

test = eeprom_read_byte((uint8_t*)par1);

PS: Gute Gelegenheit, in deinem C-Buch mal das Thema "Cast Operator" 
nachzuschlagen.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schöner:
// statt #define par1:
uint8_t EEMEM par1;

...
test = eeprom_read_byte(&par1);


Also den Compiler/Linker den EEProm-Speicher verwalten lassen.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan Ernst

Ja danke so bekomme ich die Fehlermeldung los.

@ Ernst B
Macht das einen Speicher/Geschwindigkeitsunterschied? Ich habe die 
Eeprom Artikel auf dieser Seite schonmal durchgelesen, dort wurde eine 
Array von der größe des kompletten EEPROMS angeleget, so dass dies immer 
an die selbe Stelle gelegt wird. Das wollte ich aus irgendeinen grund 
nicht machten, daher wollte ich die Adressen fest vorgeben.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan schrieb:

> Macht das einen Speicher/Geschwindigkeitsunterschied?

Nein.
Die Variante von Ernst hat aber einen Haken. Von einer Firmware-Version 
zur nächsten kann sich die jeweilige Position der Daten im EEPROM 
verändern, insbesondere wenn eine zusätzliche EEPROM-Variable 
hinzukommt. Wirklich gangbar ist dieser Weg also nur, wenn die Firmware 
sicher irgendwann einen "finalen Status" erreicht hat, oder wenn die 
Daten im EEPROM eh nicht über ein Firmware-Update hinweg gültig sein 
müssen.

> Ich habe die
> Eeprom Artikel auf dieser Seite schonmal durchgelesen, dort wurde eine
> Array von der größe des kompletten EEPROMS angeleget,

Dieses Array ist nur dann relevant, wenn du feste Adressen und im 
Programm festgelegte Initialisierungsdaten haben möchtest. Wenn du auf 
die Initialisierungsdaten verzichten kannst, besteht praktisch kein 
Unterschied zu deiner Version.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, vielen Dank euch beiden!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.