Verständnisfrage eeprom.h

Gast #820031
Lesenswert?

Hallo,

wahrscheinlich verstehe ich es nicht, weil Samstag Abend ist:

In der eeprom.h der avr-libc gibt es die Funktion eeprom_read_byte. 
Diese nimmt einen Pointer auf unsigned char als Adresse im EEPROM. Nun 
ist doch aber bei z.B. 512 Byte EEPROM-Größe ein unsigned char zum 
Adressieren zu klein; es sind nur 256 Byte adressierbar. Es gibt das 
ganze zwar auch für words, aber ich will hier nur bytes lesen. Auch im 
Datenblatt vom ATmega88 gibt es für die Adresse des EEPROM 2 Register, 
EEARH und EEARL. Wo denke ich falsch?

Danke und Gruß
Lutz
Gast #820390
Lesenswert?

Also ich blicke das immer noch nicht:
In der avr-libc ist die Funktion folgendermaßen deklariert:

uint8_t  eeprom_read_byte (const uint8_t *addr)

Mit meinem (ja leider noch arg beschränkten, deshalb ja auch das 
Verständnisproblem) C-Wissen verstehe ich die Funktion so, daß sie einen 
Wert vom Typ unsigned char zurückgibt, also einen 8 bit Wert. Kein 
Problem.

Als Funktionsargument wird ein Pointer auf ein unsigned char übergeben, 
d.h. der Ausdruck *addr soll ein unsigned char sein (der Adresswert 
besteht also auch nur aus 8 bit). Mit 8 bit kann man 256 verschiedene 
Werte darstellen (hier also 256 verschiedene Adressen angeben). Aber für 
512 byte EEPROM bräuchte ich mindestens 9 bit, also als nächsten 
"ganzzahligen" Wertetyp einen 16 bit-Wert.

Bitte laßt mich nicht dumm sterben!!!
Gast #820714
Lesenswert?

>> Nein, die Größe eines Zeigers hat absolut nichts mit der Größe des
>> Datentypen zu tun, auf den es zeigt.

Das habe ich verstanden, aber

uint8_t *addr

bedeutet doch, das der Pointer auf einen uint8_t-Datentyp namens "addr" 
zeigt, und dieser kann nur 256 verschiedene Werte (hier Adressen) 
annehmen, und das EEPROM hat 512 Adressen. Hilfe!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren