在VxWorks 5.5.1中,您可以使用execute命令运行脚本 . 在VxWorks 6.7中,不再支持执行命令 . 如果有更换,现在有人吗?我是从内部代码而不是命令行专门谈论的 .
在VxWorks内核程序员指南6.7中有一个解决方案,问题是它不适合我,但它可以帮助你:
shellGenericInit ("INTERPRETER=Cmd", 0, NULL, &shellTaskName, FALSE, FALSE,fdScript, STD_OUT, STD_ERR); do taskDelay (sysClkRateGet ()); while (taskNameToId (shellTaskName) != ERROR); close (fdScript);
检查文件的第15.2.15节 .
通过大量的研究,似乎有几种方法可以实现这一点,但没有一种方法与之前的执行命令完全相同 . 正如我在下面的评论中所述,事实证明,execute命令不是官方的API调用 .
1)可以使用shellCmdExec,但大多数都是从shell任务内部调用的 . 2)我们选择使用的解决方案 - 即从我们的启动脚本中调用它
3)和黑客的方式:
fd = open("/y/startup.go",0,0)/ *打开要执行的脚本/ v = shellFromNameGet("tShell0")/获取shell i.d. * /
/ 使用shellinOutGet来保存shell / shellInOutSet(v,fd,-1,-1)的标准/将shell的标准设置为文件 /
/ *在这里你应该恢复标准(事先做一个shellInOutGet) . 在shell完成脚本之后执行此操作 . 我会说你的脚本应该在ti完成时增加一个变量 . * /
接近(FD)
您可以在串行驱动程序层中执行此操作 . 请尝试以下代码 . 它显示了如何将文本发送到shell的输入 .
例如,
pass_to_sio(“memShow; ifconfig”);在您的C代码中 .
sp中的pass_to_sio,“memShow; ifconfig” .
pass_to_sio(“<test.scr”);如果要运行脚本文件,请在c代码中 .
如果要运行脚本文件,请在shell中使用sp pass_to_sio,“<test.scr” .
void pass_to_sio(char *input) { int old_priority; taskPriorityGet(taskIdSelf(),&old_priority); taskPrioritySet(taskIdSelf(),250); /* task priority must be lower than tShell0 */ NS16550_CHAN *pChan = &ns16550Chan[0]; /* this line depends on your BSP */ while (input != NULL && *input != NULL) { (*pChan->putRcvChar) (pChan->putRcvArg, *input); input++; } (*pChan->putRcvChar) (pChan->putRcvArg, '\r'); taskPrioritySet(taskIdSelf(),old_priority); }
3 回答
在VxWorks内核程序员指南6.7中有一个解决方案,问题是它不适合我,但它可以帮助你:
检查文件的第15.2.15节 .
通过大量的研究,似乎有几种方法可以实现这一点,但没有一种方法与之前的执行命令完全相同 . 正如我在下面的评论中所述,事实证明,execute命令不是官方的API调用 .
1)可以使用shellCmdExec,但大多数都是从shell任务内部调用的 . 2)我们选择使用的解决方案 - 即从我们的启动脚本中调用它
3)和黑客的方式:
fd = open("/y/startup.go",0,0)/ *打开要执行的脚本/ v = shellFromNameGet("tShell0")/获取shell i.d. * /
/ 使用shellinOutGet来保存shell / shellInOutSet(v,fd,-1,-1)的标准/将shell的标准设置为文件 /
/ *在这里你应该恢复标准(事先做一个shellInOutGet) . 在shell完成脚本之后执行此操作 . 我会说你的脚本应该在ti完成时增加一个变量 . * /
接近(FD)
您可以在串行驱动程序层中执行此操作 . 请尝试以下代码 . 它显示了如何将文本发送到shell的输入 .
例如,
pass_to_sio(“memShow; ifconfig”);在您的C代码中 .
pass_to_sio(“<test.scr”);如果要运行脚本文件,请在c代码中 .