Задача vxWorks блокирует ввод команд оболочки

Я порождаю задачу vxworks (taskSpawn с приоритетом 99). Эта задача постоянно обрабатывает данные. Если задача запускается, я не могу вводить какие-либо команды в оболочке vxworks. Задача tShell имеет приоритет 105.

Так как я могу вводить любые команды в оболочку. У меня есть команда, чтобы остановить задачу от дальнейшей обработки данных.

0

Решение

Планировщик VxWorks является приоритетным. Задачи выполняются по принципу «первым пришел — первым обслужен» (циклический перебор по умолчанию отключен).

Поэтому, если ваша задача выполняется непрерывно, она блокирует все задачи с более низким приоритетом (более высокий номер = более низкий приоритет в VxWorks), поскольку планировщик выбирает задачи с более высоким приоритетом для запуска в первую очередь.

Чтобы справиться с этим у вас в основном есть следующие варианты:

  • Добавить taskDelay(1); в ваш цикл обработки. Это блокирует ваш поток на один системный тик и позволяет запускать потоки с более низким приоритетом (например, tShell в вашем случае).
  • Создайте поток с более низким приоритетом, чем у оболочки (например, 110), чтобы заставить его работать в фоновом режиме.

В зависимости от сценария я рекомендую последний, так как в зависимости от вашей задачи добавление taskDelay(1); может значительно замедлить обработку (и увеличить системный тик, используя tickSet(..) до значений выше 1000 резко увеличивает нагрузку прерывания). Если вы уменьшите приоритет с другой стороны, ваша задача будет выполняться, за исключением того, что задача с более высоким приоритетом (например, оболочка) готова к запуску. В этом случае ваша задача будет прервана до завершения обработки задачи с более высоким приоритетом (например, ваша команда завершения).

2

Другие решения


По вопросам рекламы [email protected]