Чтобы исследовать последовательный порт Windows, я написал эту программу. Я установил скорость последовательного порта в 115200 бит / с. Когда я запускаю эту программу, истекшее время составляет 1250 мс, поэтому скорость передачи достигает 102400 бит / с. Я также проверяю на приеме скорость передачи с подобной программой, и скорость передачи та же самая.
Вот программа:
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);
...
}
Это мои спецификации последовательного порта:
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;
Кто-нибудь знает, как решить эту проблему, чтобы достичь скорости 115200 бит / с?