在vxworks上设置串口的波特率失败

时间:2011-06-29 12:41:59

标签: c serial-port vxworks baud-rate

我正在编写一个vxworks任务,涉及通过串口发送数据。打开串口成功。但是当我尝试使用ioctl()系统调用设置端口的波特率时, 它失败。我在下面给出代码。任何人都可以对此有所了解吗?第二个功能总是失败......

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;
}

1 个答案:

答案 0 :(得分:5)

可能有点太晚了,但上面的代码看起来很错误。作为比较运算符,赋值运算符的优先级较低,因此您应该编写如下代码:

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)