[C] uint8_t und spriftf()

OP #6366635
Mahlzeit,
Ich Programmiere einen STM32 Controller in STM CubeIDE. Die Sprache ist 
C.
Welchen Datentyp verwendet ihr für Strings? ich würde uint8_t[] nehmen..

uint8_t s[50];
sprintf(s,"Hallo ");

Wirft mir folgende Warning:
pointer targets in passing argument 1 of 'sprintf' differ in signedness 
[-Wpointer-sign]

was würdet ihr tun? char nehmen?

beste Grüße
OP
weil ich zB eine Methode habe die strings in uint8_t erwartet ...

static void tx_com(uint8_t *tx_buffer, uint16_t len)
{
  HAL_UART_Transmit(&huart2, tx_buffer, len, 1000);
}

könnte ich natürlich abändern, aber HAL_UART_Transmit benötigt auch 
uint8_t :


HAL_StatusTypeDef HAL_UART_Transmit (UART_HandleTypeDef * huart, uint8_t 
* pData, uint16_t Size,
uint32_t Timeout)  [aus : Description of STM32L4/L4+ HAL]
Marten K. schrieb:
> weil ich zB eine Methode habe die strings in uint8_t erwartet ...

Die erwartet einen Rohdaten-Puffer. Da ist ein Zeiger auf uint8_t ja 
passend. Es muss ja kein String sein, den du überträgst.
Was man also macht ist, dass man es an der Stelle, wo man die Daten an 
diese Funktion übergibt, umwandelt, wofür in diesem Fall ein Cast 
reicht.
Sprich: Intern für Strings immer char nehmen und dann an der einen 
Stelle, an der man es für die Ausgabe an die Lowlevel-Funktion übergibt, 
wird nach uint8_t gecastet.
Gast
Rolf M. schrieb:
> Marten K. schrieb:
>> weil ich zB eine Methode habe die strings in uint8_t erwartet ...
>
> Sprich: Intern für Strings immer char nehmen und dann an der einen
> Stelle, an der man es für die Ausgabe an die Lowlevel-Funktion übergibt,
> wird nach uint8_t gecastet.

So mache ich das auch. Ergab bisher die wenigsten Probleme.
Marten K. schrieb:
> okay, macht sinn.
> Wie würdest du dann casten?
>     char s[] ="Hallo \r\n";
>     tx_com( (uint8_t*)s, sizeof(s));
>
> so ?

Der cast ist richtig, statt sizeof() aber strlen() oder sizeof()-1 wenn 
die Größe zur Compilezeit bekannt ist. Das Nullbyte wirst du im 
Allgemeinen nicht mitübertragen wollen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.