vxworks 的 UART 环回测试

问题描述 投票:0回答:2

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

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

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

当我列出正在运行的任务时,我看到我为读取创建的任务是“待处理”并且优先级为 100。我使用 taskPrioritySet() 为其分配不同的优先级,但没有效果。

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

关于如何完成命令行 UART 环回测试有什么想法吗?

uart multitasking vxworks
2个回答
0
投票

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 通信的串行端口。因此,请确保您实际上使用了正确的端口名称。

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

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

0
投票

我正在 I.MX6 Freescale 板上开发 VxWorks 7。 devs 显示了我在 imx6qsabresd 板的 dts 文件中启用的 /sio1 和 /sio2。

我如何找到开发人员中您所看到的频道。

与 4 年前相比,VxWorks 的工作方式可能发生了变化。

© www.soinside.com 2019 - 2024. All rights reserved.