在VxWorks 5.5.1中,您可以使用execute命令运行脚本。在VxWorks 6.7中,不再支持执行命令。如果有更换,现在有人吗?我是从内部代码而不是命令行专门谈论的。
答案 0 :(得分:1)
通过大量研究,似乎有几种方法可以实现这一点,但没有一种方法与之前的执行命令完全相同。正如我在下面的评论中所述,事实证明,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)
答案 1 :(得分:0)
在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节。
答案 2 :(得分:-1)
您可以在串行驱动程序层中进行操作。请尝试以下代码。它显示了如何将文本发送到外壳的输入。
例如,
pass_to_sio(“ memShow; ifconfig”);在您的C代码中。
-> sp pass_to_sio,在外壳程序中为“ memShow; ifconfig”。
pass_to_sio(“ -> sp pass_to_sio,如果要运行脚本文件,请在外壳程序中输入“ 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);
}