Ich versuche, vollständige Nachrichten von meinem GPS über die serielle Schnittstelle zu lesen.Vollständige Nachrichten von der seriellen Schnittstelle analysieren
Die Botschaft, die ich für startet Suche mit:
0xB5 0x62 0x02 0x13
So von der seriellen Schnittstelle ich wie so
while (running !=0)
{
int n = read (fd, input_buffer, sizeof input_buffer);
for (int i=0; i<BUFFER_SIZE; i++)
{
if (input_buffer[i]==0xB5 && input_buffer[i+1]== 0x62 && input_buffer[i+2]== 0x02 && input_buffer[i+3]== 0x13 && i<(BUFFER_SIZE-1))
{
// process the message.
}
}
Das Problem, das ich gelesen habe ist, dass ich eine komplette Nachricht erhalten müssen . Die Hälfte einer Nachricht könnte eine Iteration im Puffer enthalten sein. Und die andere Hälfte könnte in der nächsten Iteration in die Nachricht kommen.
Jemand schlug vor, den Puffer von der vollständigen Nachricht freizugeben. Und dann verschiebe ich den Rest der Daten im Puffer an den Anfang des Puffers.
Wie kann ich dies oder irgendeinen anderen Weg machen, der sicherstellt, dass ich jede vollständig ausgewählte Nachricht bekomme, die reinkommt?
ich eine bestimmte Klasse und ID möchten. Aber ich kann auch in der Länge lesen
Sie könnten 1 Byte zu einer Zeit in einer Schleife lesen, bis Sie eine vollständige Nachricht haben. –
Schließt die Datei am Ende der Nachricht? Was beendet eine Nachricht? Was ist das allgemeine Nachrichtenformat? – Galik
@Galik Ich habe die Nachrichtenstruktur hinzugefügt – rielt12