hwcom sync auf Datenrahmen Kategorie: Programmierung (von Newbie - 16.09.2011 12:05) | ||
| ||
�ber die serielle Schnittstelle will ich regelmässige Datenrahmen empfangen. Bisher hat das ganz gut geklappt, wenn ich dies im Stile Anfrage -> Antwort gemacht habe. Ein anderes Gerät sendet regelmässig (ca. 1x pro Sekunde) einen Datenrahmen. In meinem Fall 9 Byte. Ich muss nun darauf synchronisieren und dann auswerten - aber irgendwie sehe ich den Wald vor lauter Bäumen nicht.. thread COM { byte buffer[32]; //2ter serieller Buffer byte length; int Wert1; int Wert2; int Wert3; byte Flag1; byte Flag2; byte Flag3; long timer; mem.fill(buffer,32,0x00); //Löschen loop { wait hwcom.ready(); length=hwcom.receive(buffer,9,500); //Kürzerer Horizont als der Sendetakt!! lcdext.clear();lcdext.zahl(length); //Debug Info if length!=9 //Wenn unkorrekte Anzahl - unsynchronisiert { mem.fill(buffer,9,0x00); hwcom.flush(); //Buffer verwerfen wait hwcom.rxd(); //Warten auf nächsten Rahmen continue; } //direkt weiter else { Wert1=mem.getint(buffer,0); Wert2=mem.getint(buffer,2); Wert3=mem.getint(buffer,4); Flag1=buffer[6]; Flag2=buffer[7]; Flag3=buffer[8]; wait hwcom.ready(); hwcom.send(buffer,9); //Echo } } Nun habe ich dies mit einem Terminal-Programm getestet - wie die anderen Funktionen auch. Aber es will einfach nicht klappen! Ich sende über ein Terminal folgendes im 1 Sekunden Takt (zum Testen): x01xF4x00xF0x01x2Cx01x01x01 also 9 Byte. Eigentlich hätte ich gedacht, das ich spätestens beim 2ten Senden synchronisiert bin. Aber weit gefehlt. Klappt gar nicht. Auf dem Display wird angezeigt, das weniger Bytes empfangen wurden. Aber bei 9600Baud sollten doch 9 Byte wirklich viel Schneller übertragen werden als der Timeout? Wer hat sowas schon mal gemacht? Bessere Ansätze sind gern gesehen.. | ||
Antwort schreiben Antworten: Re: hwcom sync auf Datenrahmen (von Newbie - 16.09.2011 15:32) Re: hwcom sync auf Datenrahmen (von Newbie - 16.09.2011 16:26) |