Parsing zeitlich begrenzter UART-Daten

Wenn ich versuche, Daten auf einer UART-Verbindung korrekt zurückzuentwickeln und zu dekodieren, bin ich zu den folgenden Schlussfolgerungen über das Format der empfangenen Daten gelangt.

Data wird in "Paketen" gesendet. Jedes Paket wird nur durch die Zeit (Leerzeichen) zwischen den Übertragungen begrenzt.Packets sind von variabler Länge. Die Länge wird durch das dritte Byte in der Sequenz angegeben.Data isnich unter Verwendung von Sonderzeichen oder Außerbandsignalen umrahmt, aber ein gültiges Datenpaket kann basierend auf dem letzten Byte, das ein Prüfsummenwert des Frames ist, gültig sein (angenommen wird).

Bei Verwendung eines Logikanalysators ist es einfach, Pakete zu erkennen. Das Einspeisen der Daten über UART in ein Programm macht jedoch die Begrenzung von Paketen unmöglich. Alle empfangenen Daten werden vom Betriebssystem in die Warteschlange gestellt. Zwar können bestimmte Handler hinzugefügt werden, um bei empfangenen Datenereignissen auszulösen. Dies stellt jedoch nicht sicher, dass die in der Warteschlange des Betriebssystems verfügbaren Daten ein ganzes Paket sind.

Gibt es Best Practices für die Trennung solcher Daten?

Nachtrag

Meine aktuelle Lösung (die einen enormen Overhead und eine große Fehlerrate hat):

Beginnen Sie mit dem ersten Byte in der Warteschlange und analysieren Sie einen Frame. Wenn die im Frame angegebene Größe größer als 0x20 ist (es gibt keine Pakete, die größer als 32 Byte sind - Header und Prüfsumme enthalten), wird das aktuelle "Startbyte" als ungültig betrachtet und gelöscht, und die Erkennung wird ab dem nächsten Byte usw. fortgesetz

Die andere Lösung, an der ich arbeite, ist die Verwendung eines Mikrocontrollers, um die Daten zu analysieren und richtig zu rahmen, entweder bandintern oder bandextern. Dies ist eine bessere Lösung, da ein solches zeitkritisches Protokoll ein RTOS erfordern sollte. Dennoch muss es eine Möglichkeit geben, dies auf einem normalen Betriebssystem zu implementieren.

Logic Analyzer: (Das erste und das zweite Byte SIND NICHT konstant. Ich habe abgezogen, dass das erste Byte eine Adresse ist (oder vielleicht ein Zeitschlitz, und das zweite Byte ist ein Pakettyp).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage