rs232 delay von >500µs zwischen bytes
-
Hallo,
ich nutze in meinem MFC Programm die serielle Schnittstelle um mit einem µC
zu kommunizieren.
Wenn ich dem µC Steuersignale Byteweise sende, dann werden die 4 Byte
( 0xF0, 0xF0, 0x03, 0x02 ) zwar gesendet, es ensteht jedoch ein delay
zwischen den bytes von jeweils 500µs. Dieses delay ist für meine Zeitkritische
Anwendung zu groß.
Wie erreiche ich z. B. ein Senden der Daten als Block.Ich verwende die CSerial.cpp als Klasse.
Besteht die Möglichkeit das Betriebssystem zu umgehen?
Wichtig ist, die Daten ohne Zeitverzug dem µC zu übergeben.
-
versuch's damit: http://msdn2.microsoft.com/En-US/library/aa363473.aspx

-
Was für eine Baudrate nutzt du ?
Ggf. diese mal höher stellen.
Mit > 9600 solltest du keine Probleme mehr habenDas könnte dir weiterhelfen http://de.wikipedia.org/wiki/RS232
Absatz Timing.
MfG TokTom
-
Hallo,
ich verwende 115200Baud. Sollte also schnell genug sein.
Ich verwende folgenden Befehl zum senden:
BYTE command[4]={0xF0,0xF0,0x03,0x02};for(i=0;i<4;i++)serial.SendData(command[i], 1);
Das ganze wird zyklich durch einen Timer, der mit 20ms läuft, ausgeführt.
Wenn ich mit CANOe5.2 (CANalyser) Daten über den Seriellen Port sende,
gibt es eine Funktion Blocksenden. Der Datenstrom wird dann ohne Delay
zum µC übergeben. Ist die DLL, welche ich hierfür einbinden mußte, eventuell
auch in MFC einbindbar?Vielen Dank.
-
Du definierst die Kommandosequenz als Block, sendest aber jedes Byte einzeln (weil Du serial.SendData() 4 mal aufrufst). Gibt es denn keine Möglichkeit command als byte string zu senden; in einem Rutsch?
Blackbird
-
Naja, wenn Du die Bytes einzeln sendest, dann darfst Du Dich auch nicht wundern, dass hier Zeitverluste entstehen!!! (User-Kernel-User Roundtrip).
Deshlab *alle* 4 Bytes auf *einmal* versenden!
-
Jochen Kalmbach schrieb:
Naja, wenn Du die Bytes einzeln sendest, dann darfst Du Dich auch nicht wundern, dass hier Zeitverluste entstehen!!! (User-Kernel-User Roundtrip).
Deshlab *alle* 4 Bytes auf *einmal* versenden!
Kannst du mir bitte einen Tip geben, wie man alle 4 Byte zusammen senden kann.
Ich hatte das ganze schon versucht, hatte jedoch nicht funktioniert.Vielen Dank für eure Unterstützung.
Ronny
-
Da musst DU in Deiner CSerial Klasse nachschauen wie das geht...
Bei
http://www.codeproject.com/system/serial.asp
geht es z.B. via:Write(pData, 4);