问题描述
我试图编写命令行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 ()为其分配了不同的优先级,但无济于事
我希望我创建的任务会在执行 write ()时唤醒,而我希望在 read ()调用中立即阻止该任务
关于如何完成命令行UART回送测试的任何想法?
解决方法
如您建议的那样,
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上的操作,可以抛开串行端口并打开文件作为测试。至少您可以确定可以按预期方式读写fileDescriptor。
fd=open("testFile",0x10)
d W