1

CentOSでシリアルポートを設定しようとしていますが、動作させることができません。これは私が問題を抱えているコードです。

tcgetattr(idComDev[i], &options); // get current settings

    printw("default baudrate is %d ", cfgetispeed(&options));

    cfsetispeed(&options, B115200); // set baud rate
    cfsetospeed(&options, B115200); // set baud rate

tcsetattr(idComDev[i], TCSANOW, &options);// save the settings

    printw("Seg %d = COM%hd at %d Baudrate",i,CommNo[i], cfgetispeed(&options));

これからの出力は次のとおりDefault baud rate is 4098 Seg0 = COM1 at 4098 Baudrateです。

なぜ4098なのですか?このボーレートはどこにも見つかりません。

ボーレートを1800に設定すると、10になります。9600に設定すると、13になります。

いくつかの調査を行ったところ、ハードウェアがこの高いボーレートをサポートできない可能性がありますが、接続しようとしている同じデバイスと通信する同じコンピューター上にJavaプログラムがあります。だから私はこれがそのような場合ではないことを知っています。

誰かが何が起こっているのか、そしてそれを修正する方法を知っていますか?

4

1 に答える 1

3

B115200はマクロであり、に展開され0x1002ます。これは2ビットの組み合わせです。0x1000は(あなたが発見したように)非標準レートであることを示し、0x2は2番目の非標準レート(B57600つまり0x1001、最初の非標準レート)です。

于 2011-10-04T09:23:43.183 に答える