1

シリアル ポート経由でデータを送信する vxworks タスクを作成しています。シリアルポートのオープンに成功。しかし、ioctl() システム コールを使用してポートのボー レートを設定しようとすると失敗します。私は以下のコードを与えています。誰かがそれに光を当てることができますか?2番目の機能は常に失敗しています...

int f, status;

if (f = open("/tyCo/1", O_RDWR, 0) == ERROR)
{
    printf("error opening serial port; exiting...");
    return 1;
}

if (status = ioctl(f, FIOBAUDRATE, 2400) == ERROR)
{
    printf("ioctl error; exiting...");
    return 1;
}
4

1 に答える 1

6

少し遅すぎるかもしれませんが、上記のコードは間違っているようです。代入演算子は比較演算子よりも優先度が低いため、次のようなコードを記述します。

if((f = open("/tyCo/1", O_RDWR, 0)) == ERROR)
{
    printf("error opening serial port; exiting...");
    return 1;
}

if((status = ioctl(f, FIOBAUDRATE, 2400)) == ERROR)
{
    printf("ioctl error; exiting...");
    return 1;
}

このようにして、VxWorks で完璧に動作します。あなたがコードを書いた方法は、 f に 0 または 1 (この場合はシリアルポートを開くことができるため 0) を割り当て、次にファイル記述子 0 のボーレートを設定しようとしました (私は stdout id だと思います)。ステータスに 0 または 1 を割り当てたのと同じ (この場合は 1、ボーレートを設定できなかったため、ioctl は -1 を返しました)

于 2012-07-02T06:33:22.307 に答える