【问题标题】:Setting baud rate of serial port fails on vxworks在 vxworks 上设置串口波特率失败
【发布时间】:2011-06-29 12:41:59
【问题描述】:

我正在编写一个涉及通过串行端口发送数据的 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;
}

【问题讨论】:

  • 只是为了清楚。你是说你打开端口然后设置波特率?如果正确,请尝试设置波特率,然后打开端口。
  • @dbasbett -- ioctl() 需要从 open() 调用返回的文件描述符 -- 你建议如何先设置波特率?
  • m -- 检查您正在使用的设备上的文档以查看有效的波特率是多少。还要仔细检查设备上的任何配置设置。

标签: c serial-port vxworks baud-rate


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多