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


von Jan (Gast)


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:
1
#define   par1   0x001

Jetzt würde ich gerne mit:
1
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

von Stefan E. (sternst)


Lesenswert?

Jan schrieb:
> Lässt sich das beheben?

1
test = eeprom_read_byte((uint8_t*)par1);

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

von Εrnst B. (ernst)


Lesenswert?

Schöner:
1
// statt #define par1:
2
uint8_t EEMEM par1;
3
4
...
5
test = eeprom_read_byte(&par1);

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

von Jan (Gast)


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.

von Stefan E. (sternst)


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.

von Jan (Gast)


Lesenswert?

OK, vielen Dank euch beiden!

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.