uint8_t* als Rückgabewert als Adresse

OP #6838307
Lesenswert?
• ▲
▼
Hallo,
ich habe hier im Code eine Funktion, wo ich den Rückgabewert nicht ganz 
verstehe.
1
uint8_t* getTxBufferAdress(uint16_t id);

Das ganze läuft auf einem 32-bit system.
in der Beschreibung steht:
"return Trasnmit Buffer message pointer related to the index"
Es gibt also die Adresse von id zurück. Aber sollte die Adresse nicht 
32-bit sein? Also uint32_t* ?
Wie sieht der Rückgabewert aus?
Gast #6838327
Lesenswert?
• ▲
▼
Chandler B. schrieb:
> Hallo,
> ich habe hier im Code eine Funktion, wo ich den Rückgabewert nicht ganz
> verstehe.uint8_t* getTxBufferAdress(uint16_t id);
>
> Das ganze läuft auf einem 32-bit system.
> in der Beschreibung steht:
> "return Trasnmit Buffer message pointer related to the index"
> Es gibt also die Adresse von id zurück. Aber sollte die Adresse nicht
> 32-bit sein? Also uint32_t* ?
> Wie sieht der Rückgabewert aus?

der zurück gegebene Pointer zeigt auf einen 8-Bit Wert.
Gast #6838336
Lesenswert?
• ▲
▼
Höchst wahrscheinlich wird der TX Buffer von Datentyp uint8_t sein. Also 
ein Array von uint8_t.
Wenn deine Beschreibung stimmt, gibst du über id den Index innerhalb des 
Arrays an und bekommst die Adresse des gewünschten Elements zurück. 
Quasi das selbe wie wenn du das hier schreibst:
1
uint8_t u8Buffer[65535];
2
...
3
uint8_t* pu8Return = &u8Buffer[id];

id ist deshalb ein uint16_t da du ja mehr als 256 Elemente haben kannst 
(siehe mein Beispiel). Es könnte genau so gut ein uint32_t sein.

Warum also die Funktion verwendet wird kann mehrere Gründe haben.
Vielleicht wird in ihr eine Bereichsprüfung durchgeführt um ein Out of 
Bound Zugriff abzufangen.
Vielleicht wird auch ein großer Buffer für unterschiedliche 
Applikationsteile oder Instanzen fragmentiert und deshalb intern mit 
Ofsets gearbeitet.
Das kann keiner sagen.
Du kannst ja Mal den Code innerhalb der Funktion getTxBufferAdress 
posten.
#6838547
Lesenswert?
• ▲
▼
Chandler B. schrieb:
> Die Variable (uint8_t* var), mit der ich diese Funktion aufrufe

Du hast keine (uint8_t* var) Variable mit der du die Funktion aufrufst, 
zumindest nicht im o.g. Code Schnippsel.

Aber ja. Zur Veranschaulichung:
1
uint8_t buf[1024] = "Hallo";
2
uint8_t *var;
3

4
var = getTxBufferAdress(1);
5

6
// var zeigt auf die Adresse buf[1] und somit auf 'a'.

Falls die Funktion wirklich das tut wie sie heißt,
weiß hier leider niemand.

Probier es doch einfach aus und schau dir an was passiert, evtl. im 
Debug Mode.

Und natürlich ist der Zeiger auf einem 32-Bit System, auch 32-Bit groß, 
er muss ja 32-Bit Adressen aufnehmen können.
Er zeigt halt nur auf Byte-Elemente. (Interpretation der Werte die an 
dieser Adresse liegen)
Gast #6838863
Lesenswert?
• ▲
▼
Chandler B. schrieb:
> "return Trasnmit Buffer message pointer related to the index"
> Es gibt also die Adresse von id zurück. Aber sollte die Adresse nicht
> 32-bit sein? Also uint32_t* ?

wenn du ein 32bit system hat dann:

sizeof(uint8_t) == 1
aber
sizeof(uint8_t*) == 4

uint8_t-Zeiger bedeutet das bei dir ein 32bit Zeiger auf einen uint8_t 
Wert zeigt - mehr nicht

sizeof(void*) == 4
sizeof(irgendein_struct*) == 4
sizeof(irgendein_typ*) == 4

der Typ vor dem Stern sagt nur aus was für ein Typ das Ziel des Zeigers 
hat
Gast #6839914
Lesenswert?
• ▲
▼
Chandler B. schrieb:
> "return Trasnmit Buffer message pointer related to the index"

Gib das in einen Übersetzer ein:

  https://www.deepl.com/translator#en/de/return%20Transmit%20Buffer%20message%20pointer%20related%20to%20the%20index


> Es gibt also die Adresse von id zurück.

Nein. Es gibt eine Adresse auf einen Buffer zurück. Dieser Buffer wird 
anhand einer ID "ausgewählt".

D.h., es gibt eine Zuordnung der Form

   id --> Buffer

Und wenn Du nun die ID hast, kannst Du mit dieser Funktion die Adresse 
des Buffers bekommen.

Die "ID" ist nur ein Handle, ein Deskriptor, ein Verweis.

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.