Выполнение скрипта из внутреннего кода в VxWorks 6.7 - PullRequest
1 голос
/ 26 мая 2010

В VxWorks 5.5.1 вы можете запустить скрипт с помощью команды execute. В VxWorks 6.7 команда execute больше не поддерживается. У кого-нибудь сейчас есть замена? Я специально говорю изнутри кода, а не командной строки.

Ответы [ 3 ]

1 голос
/ 14 июня 2010

В результате многочисленных исследований выясняется, что есть несколько способов сделать это, но ни один из них не является точно таким же, как команда execute из ранее. Как я уже говорил в комментарии ниже, оказывается, что команда execute не является официальным вызовом API.

1) shellCmdExec может использоваться, но большинство вызывается из задачи оболочки. 2) Решение, которое мы выбираем, - это вызвать его из нашего скрипта запуска

3) И взломать путь:

fd = open ("/ y / startup.go", 0, 0) / * открыть скрипт, который вы хотите выполнить / v = shellFromNameGet ("tShell0") / Получить оболочку i.d. * /

/ * Используйте shellinOutGet, чтобы сохранить стандартную оболочку / shellInOutSet (v, fd, -1, -1) / Установить стандартное значение оболочки для файла * /

/ * Здесь вы должны восстановить стандарт в (заранее сделайте shellInOutGet). Сделайте это после того, как оболочка будет выполнена с помощью скрипта. Я бы сказал, что ваш скрипт должен увеличивать переменную по окончании времени. * /

близко (FD)

0 голосов
/ 17 октября 2018

Вы можете сделать это в слое последовательного драйвера. Попробуйте следующий код. Показывает, как отправить текст на вход оболочки.

Например,

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); 
}
0 голосов
/ 28 августа 2014

В руководстве для программиста VxWorks Kernel 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 документа.

...