首页 文章

从VxWorks 6.7中的内部代码执行脚本

提问于
浏览
1

在VxWorks 5.5.1中,您可以使用execute命令运行脚本 . 在VxWorks 6.7中,不再支持执行命令 . 如果有更换,现在有人吗?我是从内部代码而不是命令行专门谈论的 .

3 回答

  • 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节 .

  • 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)

  • 0

    您可以在串行驱动程序层中执行此操作 . 请尝试以下代码 . 它显示了如何将文本发送到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); 
    }
    

相关问题