Pour sonder le port série de Windows, j’ai écrit ce programme. Je règle la vitesse de transmission du port série à 115200 bps. Lorsque je lance ce programme, le temps écoulé est de 1250 ms. Le débit en bauds n’atteint que 102400 bps. Je vérifie également à la réception le débit en bauds avec un programme similaire et le débit est le même.
Voici le programme:
char* message = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; int numBytes = 144; c0 = clock() for (;;) { sendSerial(&hCom, message, numBytes ); tx +=numBytes; //14400 bytes * 8 = 115200 bps if (tx >= 14400) { c1 = clock(); runtime_diff_ms = (c1 - c0) * 1000. / CLOCKS_PER_SEC; printf("Tx frames %d Time ms %f", tx, runtime_diff_ms); system ("pause"); return -1; } } bool sendSerial(HANDLE *hCom, char *WriteBuffer, DWORD dwBytesToWrite) { DWORD dwBytesWritten = 0; BOOL bErrorFlag = FALSE; bErrorFlag = WriteFile( *hCom, // open file handle WriteBuffer, // start of data to write dwBytesToWrite, // number of bytes to write &dwBytesWritten, // number of bytes that were written NULL); ... }
Voici les spécifications de mon port série:
DCB dcbSerialParams; COMMTIMEOUTS timeouts; dcbSerialParams.BaudRate=CBR_115200; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; timeouts.ReadIntervalTimeout=MAXDWORD; timeouts.ReadTotalTimeoutMultiplier=MAXDWORD; timeouts.ReadTotalTimeoutConstant=5000; // 5sec timeouts.WriteTotalTimeoutMultiplier=10; timeouts.WriteTotalTimeoutConstant=100;
Quelqu’un sait comment résoudre ce problème pour atteindre 115200 bps?
Il y a 10 bits par caractère – 8 bits pour les données plus un bit de début et un bit d’arrêt.
Si vous calculez combien de temps 14400 caractères à 10 bits par caractère devraient prendre à 115200 bps, vous obtenez 1250 ms:
(14400 characters * 10 bits/character) / (115200 bits/second) = 1.250 seconds