Anfängerfrage: Pointer übergeben

Gast #1803757
Lesenswert?

Hallo,
Ich habe eine vielleicht blöde Frage:
Ihr kennt doch die Funktionen "eeprom_write_byte()" und 
eeprom_read_byte". Ich habe eine neue Funktion gebaut, die so aussieht:
1
void _eeprom_write_byte(uint8_t *ptr_EE,uint8_t value)
2
{
3
   
4
    for(uint8_t i=0;i<EEPROM_NUMBER_OF_COPIES;i++)
5
    {
6
        eeprom_write_byte(ptr_EE + (EEPROM_TOTAL_AMOUNT_OF_DATA*i),value);
7
        while((NVM.STATUS&0x02) != 0x02);
8
    }
9
    eepromDoCrc();
10
}

Mit dieser Funktion erstelle ich automatisch eine (oder mehrere) 
Sicherheitskopien im EEPROM (mit CRC-Code verifiziert) um im Fehlerfall 
noch richtige Daten zu haben. Die Anzahl der Daten im EEPROM und die 
Anzahl der zu erstellenden Kopien stelle ich mit 
EEPROM_TOTAL_AMOUNT_OF_DATA bzw. mit EEPROM_NUMBER_OF_COPIES ein.

Ein Aufruf sieht z.B. folgendermaßen aus:
1
_eeprom_write_byte(&test,0xFF);

Nun zu meinem Problem: Was ist, wenn ich auf einen Bereich über der 
EEPROM-Adresse 0xFF schreiben will. Ich übergebe hier doch einen Pointer 
(uint8_t *ptr_EE) und in der Funktion gebe ich die zu beschreibende 
EEPROM-Adresse explizit an. Wenn ich viele Daten habe, muss ich dort 
definitiv Werte über 255 angeben. Muss ich dann uint16_t *ptr_EE 
schreiben? Wie muss ich da vorgehen, bin da ein bisschen ein Anfänger! 
:)

Vielen Dank für eure Hilfe!

mfg
Andy
Gast #1803792
Lesenswert?

Aha... Das heißt ich könnte für
1
void _eeprom_write_byte(uint8_t *ptr_EE,uint8_t value)
entweder
1
_eeprom_write_byte(&test,0xFF);
oder z.B.
1
_eeprom_write_byte(584,0xFF);
übergeben, obwohl in der Definition uint8_t *ptr_EE steht??
#1803794
Lesenswert?

Andy schrieb:
> Aha... Das heißt ich könnte für
>
1
> void _eeprom_write_byte(uint8_t *ptr_EE,uint8_t value)
2
>
> entweder
>
1
> _eeprom_write_byte(&test,0xFF);
2
>
> oder z.B.
>
1
> _eeprom_write_byte(584,0xFF);
2
>
> übergeben, obwohl in der Definition uint8_t *ptr_EE steht??

Ja.
Das uint8_t bezieht sich darauf, was man im Speicher findet, wenn man 
unter dieser Adresse nachsieht.
Gast #1803795
Lesenswert?

Nun musste ich selber erst zweimal überlegen wie die Antworten gemeint 
sind. Und da ich denke dass der Fragensteller es auch nicht gleich 
versteht noch einmal.

mit
1
uint8_t *ptr_EE

deklarierst du einen Pointer der auf eine Stelle zeigt an der ein uint8 
Wert steht. Du weißt zum Zeitpunkt der Programmierung aber nicht 
explizit wie groß (wieviel Bits) der Pointer selber ist. Du kannst davon 
ausgehen, dass der Compiler den Pointer genauso groß macht, dass dein 
Controller damit arbeiten kann, inklusive der Paging-Geschichten mancher 
Controller.

Der Pointer wird immer gleich groß sein egal auf was er zeigt.
1
uint8 *ptr_ui8;
2
uint16 *ptr_ui16;
3
MyType *ptr_to_Struct_MyType;

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