【问题标题】:UART loopback test for vxworksvxworks 的 UART 环回测试
【发布时间】:2020-09-08 20:03:47
【问题描述】:

我正在尝试编写命令行 UART 环回测试。首先,我使用 'devs' 找到串行端口:/tyCo/0。然后我打开串口进行读/写:fd=open("/tyCo/0",2).

由于 read() 似乎是一个阻塞调用,我尝试创建一个任务来执行读取: sp(read, fd, &W, 0x10) 其中 W=malloc(0x10)

我尝试写入 fd: write(fd,"HELLO",5) 但是当我在 &W 显示内容时,我得到了垃圾。

当我列出正在运行的任务时,我看到我为读取创建的任务是“PENDING”并且优先级为 100。我使用 taskPrioritySet() 为其分配不同的优先级,但无济于事.

我希望我创建的任务(我想在 read() 调用上立即阻止)在我执行 write() 时会唤醒.

关于如何完成命令行 UART 环回测试的任何想法?

【问题讨论】:

    标签: uart multitasking vxworks


    【解决方案1】:

    按照您的建议,read 调用正在阻塞,但只有在没有可读取的内容时才会阻塞。因此,您不必为其生成任务,只需从命令行调用即可(如果由于缺少输入而阻塞,您可以通过终端发送 CTRL-C 来中断调用并重新启动命令行任务)

    另外一点是,W 是一个指针,指向分配的内存。无需获取它的地址(我不确定 VxWorks shell 是否处理其变量的地址引用)

    作为免责声明,目前我没有系统来测试以下这些步骤。但是在完成了你想要做的事情之后,它应该是这样的。

    总结起来,这应该是一个MWE:

    fd=open("/tyCo/0",2)
    W=malloc(0x10)
    write(fd,"HELLO",5)
    read(fd, W, 0x10)
    d W
    

    附带说明,tyCo/0 通常是用于 vxWorks shell 通信的串行端口。因此,请确保您实际上使用了正确的端口名称。

    要验证对文件描述符的操作,您可以放弃串行端口并打开文件作为测试。至少您可以确定可以按预期读写文件描述符。

    fd=open("testFile",2)
    W=malloc(0x10)
    write(fd,"HELLO",5)
    read(fd, W, 0x10)
    d W
    

    【讨论】:

      猜你喜欢
      • 2018-05-14
      • 1970-01-01
      • 2013-03-27
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多