последовательный порт Windows - PullRequest
1 голос
/ 04 июля 2011

Чтобы исследовать последовательный порт 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 бит / с?

1 Ответ

5 голосов
/ 04 июля 2011

Существует 10 бит на символ - 8 бит для данных плюс стартовый и стоповый бит.

Если вы подсчитаете, сколько 14400 символов при 10 битах на символ должно занимать 115200 бит / с, тогда вы получите 1250 мс:

(14400 characters * 10 bits/character) / (115200 bits/second) =  1.250 seconds
...