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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.