我正在编写一个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;
}
答案 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)