Über RS232 empfangene Daten einer Funktion zuweisen?
-
Hallo zusammen,
ich muß ein Programm schreiben, das mit einem µC per RS232 kommuniziert. Senden ist kein Thema. Empfangen kann ich auch. Ich nehme über einen extra Thread mit ReadFile die Daten entgegen.
Mein Problem:
In einem anderen Thread schicke ich aus einer Funktion heraus ein Befehl über die RS232 raus. Die Antwort (vom µC) müßte nun direkt zu dieser Funktion zurück kommen.
Ist es möglich die Daten aus dem Empfangs Thread direkt an die Funktion zu senden, die auf die Antwort wartet?
Ein weiteres Problem ist die wartende Funktion. In der 1. Version habe ich etwas gesendet, und dann solange gewartet, bis ich etwas empfangen habe. "sehr schlecht"!
BSP:int Isel::rs232_receive() { int b=0; if(rec_daten_gueltig==false) { NumberOfBytesRead=rs232_com->ReceiveData(Buffer,19); b=1; } if (NumberOfBytesRead > 0) //Es wurden Daten empfangen => Flag setzen { rec_daten_gueltig=true; b=0; } return b; ...... int Anz_gesendete_bytes = rs232_com->SendData(Stop.c_str(),Stop.Length()); if (Anz_gesendete_bytes != Stop.Length()) return -1; else { while((rec_daten_gueltig==false)&&(a<=50)) { a++; Delay(10); } rec_daten_gueltig=false; //Daten im globalen Empfangspuffer ungültig setzen return (Buffer[0]-48); } } ......
Was ich brauche: Eine Funktion in einem Thread sendet einen Befehl über RS232, legt sich dann solange schlafen, bis der Empfangsthread etwas für diese Funktion empfangen hat und sie wieder aktiviert (sollte an dem Punkt weiterlaufen, wo sie angehalten wurde).
Danke
Christian
[edit="junix"]
Code-Tags verwenden! sfds
[/edit]
-
entweder
Mit WaitForSingleObject oder du sendest die daten dann den Thread aufruf
SuspendThread und aus dem Empfangsthread wieder aufweckenMfg TheBender