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?
Tino K. schrieb: > Verarbeitet man den angnommenen String ... Das ist kein String. Hör auf es so zu behandeln :-)
Tino K. schrieb: > Der Inhalt ist pro Byte kodiert Dann musst du jedes Byte für sich in ein Array schreiben und interpretieren.
Alles hat 1 Ende (auch ein String), nur die Wurst hat 2.
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?
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)
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
Natürlich einen Parser! Von mir aus sogar mit gotos gespickt. Bedenke: Nicht jeder Parser muss ein Dinosaurier sein.
Eben, map das Zeug auf einen packed struct und du kannst komfortabel auf die Inhalte zugreifen :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.