Tipps für serielle Kommunikation
-
Hallo zusammen
Ich versuche ein simples Kommunikations-Protokoll innerhalb des USB-Protokolls zu definieren. Die Daten werden über eine serielle Schnittstelle versendet und empfangen. ReadFile() und WriteFile() funktionieren problemlos. Ich möchte die gesamte Kommunikation nun jedoch etwas optimieren. In meinem Protokoll ist ein Start- und Stop-Byte definiert.
Muss ich nun jedes einzelne am Port ankommende Byte mit ReadFile() einlesen und überprüfen ob es sich um das Stop-Byte handelt?
Mit SetCommMask(), seinem Attribut EV_RXFLAG und WaitCommEvent() komme ich nicht weiter...
Bin für jeden Hinweis dankbar.
Grüsse, Ratio
-
Verwende eine Klasse wie diw von PJ Naughter:
http://www.naughter.com/serialport.html
-
Danke für den Link. Habe mir die Klasse angesehen. Natürlich möchte ich das Rad nicht neu erfinden doch versuche ich die Kommunikation über den COM-Port analog der gelinkten Klasse selbst zu erstellen.
Ich habe jedoch noch einige Verständnis-Fragen:
Die erste dreht sich um das Event-Byte. Ich habe ungefähr folgenden Code:
//Aktueller Status des COM GetCommState(hComFile, &dcb); dcb.EvtChar = (char)0xE0; //End-Byte //Neuer Status setzen if(!SetCommState(hComFile, &dcb)) return; //Event-Maske setzen if(!SetCommMask(hComFile, EV_RXFLAG)) return; //Auf das definierte Event warten if(WaitCommEvent(hComFile, &dwCommEvent, &r) == FALSE) { if(GetLastError() == ERROR_IO_PENDING) { switch(WaitForSingleObject(r.hEvent, 1000)) { case WAIT_OBJECT_0: break; //Der Event wurde signalisiert case WAIT_TIMEOUT: return; //Time-Out-Intervall abgelaufen break; default: return; break; //Wait_Abandonned } } }Da ich mit einem Sniffer die Kommunikation analysieren kann bin ich mir sicher dass das definierte Event-Byte in weniger als 1/4-ms gesendet wird. Weshalb laufe ich im Debug-Mode dann stets auf den Time-Out-Return?
Grüsse, Ratio
-
Serielle Kommunikation ist NICHT einfach.
Auch solltest Du den *gesamten* DCB nach Deinen wünschen setzen und nicht davon ausgehen, dass darin schon irgendetwas stimmt...