1

我正在编写一个涉及通过串行端口发送数据的 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;
}
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 设置波特率(我猜是标准输出 id)。与您分配状态相同的 0 或 1(在这种情况下为 1,因为您无法设置波特率,所以 ioctl 返回 -1)

于 2012-07-02T06:33:22.307 回答