Forum: Mikrocontroller und Digitale Elektronik UART String hat mehrere Endzeichen ('\0')


von Tino K. (blumengiesser)


Lesenswert?

Ich verwende den Feinstaubsensor SDS011 und dieser sendent sekündlich 
einen Datenstring aus 10 Byte per UART. Dieser enthält ein Startbyte 
0xAA und ein Endbyte 0xAB. Der Inhalt ist pro Byte kodiert und kann 
mehrmals 0x00 also '\0' (String Ende) sein. Verarbeitet man den 
angnommenen String dann per Stringfunktion funktioniert das ganze 
natürlich nicht mehr und man muss diesen einzeln durchgehen. Gäbe es 
dafür einen Trick?

von Peter D. (peda)


Lesenswert?

Dafür gibt es die mem*** Funktionen, wie .B. memcmp.

von Stefan P. (form)


Lesenswert?

Tino K. schrieb:
> Verarbeitet man den angnommenen String ...

Das ist kein String. Hör auf es so zu behandeln :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tino K. schrieb:
> Der Inhalt ist pro Byte kodiert
Dann musst du jedes Byte für sich in ein Array schreiben und 
interpretieren.

von batman (Gast)


Lesenswert?

Alles hat 1 Ende (auch ein String), nur die Wurst hat 2.

von Axel S. (a-za-z0-9)


Lesenswert?

Tino K. schrieb:
> Datenstring aus 10 Byte per UART. Dieser enthält ein Startbyte
> 0xAA und ein Endbyte 0xAB. Der Inhalt ist pro Byte kodiert und kann
> mehrmals 0x00 also '\0' (String Ende) sein. Verarbeitet man den
> angnommenen String dann per Stringfunktion funktioniert das ganze
> natürlich nicht

Natürlich nicht. Ein String ist (in C) zwar ein Array von Bytes, aber 
nicht jedes Array von Bytes ist deswegen ein String. Wie kommt man 
überhaupt auf die Idee, in dieser Situation Stringfunktionen verwenden 
zu wollen?

> Gäbe es dafür einen Trick?

Was für einen "Trick" brauchst du denn, um auf einzelne Bytes aus einem 
Array zuzugreifen?

von Einer K. (Gast)


Lesenswert?

Ich kenne einen Trick!

Baue dir einen Parser.

Sind die Datenblöcke erstmal identifiziert, kannst du eine, dir genehme, 
Struktur draus bauen.
Meinetwegen auch Zeichenketten.

Tipp:
Wende die c Zeichenketten Funktionen nur auf C Zeichenketten an.
Sonst drohen Sorgen und Nöte.
(aber das weißt du ja schon, selber bemerkt)

von Axel S. (a-za-z0-9)


Lesenswert?

Arduino F. schrieb:
> Ich kenne einen Trick!
> Baue dir einen Parser.

Ein Parser für 10 Byte binäre(!) Daten? Du scherzt!

> Sind die Datenblöcke erstmal identifiziert

Du brauchst einen Parser, um 3 16-bittige Werte an festen Positionen aus 
einem Block von 10 Bytes herauszupulen?

Datenblatt: https://nettigo.pl/attachments/398

von Einer K. (Gast)


Lesenswert?

Natürlich einen Parser!
Von mir aus sogar mit gotos gespickt.

Bedenke:
Nicht jeder Parser muss ein Dinosaurier sein.

von batman (Gast)


Lesenswert?

Der Insider nennt sowas übrigens struct.  :-)

von Chris (Gast)


Lesenswert?

Eben, map das Zeug auf einen packed struct und du kannst komfortabel auf 
die Inhalte zugreifen :)

von Tino K. (blumengiesser)


Lesenswert?

Meine Frage richtete sich nicht mit dem Ansinnen Lösungen zu bekommen, 
weil ich nicht mehr weiter weiß. Eher Denkanstöße für später zu 
bekommen...
Werte die entsprechenden Bytes einzeln aus und behandele es nicht weiter 
als String. Aber bis ich drauf gekommen bin, hat es echt eine ganze 
Weile gedauert.

Danke für alle Antworten!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.