2

QSerialPort クラスを使用して、シリアル ポートの読み取りと書き込みを試みています。現在、eltima ドライバーによって実装された仮想コンポートを使用しています。次のようなバイトを正常に送信できます。

QSerialPortInfo info = QSerialPortInfo("COM30");

QSerialPort serial;

serial.setPort(info);

serial.setBaudRate(57600);

serial.open(QIODevice::ReadWrite);

char arr[] = {0xAA, 0xBB, 0xCC, 0xDD};

serial.write(arr, 4);

私はこのように読み取ろうとしています (1 バイトだけを読み取りたいです。データを読み取る準備ができている場合、このコードはタイマーによって呼び出されます):

virtual uint8_t getByte(void)
{
    char arr[2] = {0};

    int8_t err = qPort.read(arr, 1);

    DEBUG_ASSERT(err != -1);

    if(! isNewByte() )
    {
        onReceiveFinished();
    }

    return arr[0];
}

仮想ポート (つまり、プログラム) に 128 未満の値を送信すると、(デバッガーが示すように) 正しい値になります。ただし、128 以上を送信しようとすると、値 -128 o_o が返されます (153 を送信すると、-25 や 103 ではなく 25 になります)。それは私には本当に奇妙に思えます。間違いがどこにあるのか誰にもわかりますか?

4

2 に答える 2

0

いいえ。setBaudRate() を間違えました。ポートが開いた後に行う必要があります。

于 2013-06-06T16:12:39.610 に答える
0

私の間違いは本当に愚かでした。QSerialPort はデフォルトで 7 データビットに設定されているため (これは実際にはあまり実用的ではないようです)、受信したすべてのバイトの MSB が切り捨てられます (128 を減算するように)。

それでも、奇妙なことに、送信はうまくいきました。

于 2013-06-06T13:50:03.640 に答える