vxWorks任务阻塞shell命令输入

vxWorks task blocks shell command input

本文关键字:命令 输入 shell 任务 vxWorks      更新时间:2023-10-16

我正在生成一个vxworks任务(taskSpawn优先级99)。该任务持续处理数据。如果任务正在运行,则无法在vxworks shell中输入任何命令。tShell任务的优先级为105。

那么我如何在shell中输入任何命令呢?我有一个命令来停止任务进一步处理数据

VxWorks调度程序是基于优先级的。任务以先到先服务的方式执行(默认禁用轮询)。

因此,如果您的任务连续运行,它会阻塞所有优先级较低的任务(在VxWorks中,较高的数字=较低的优先级),因为调度器选择高优先级的任务先运行。

要处理这个问题,您主要有以下选项:

  • 添加一个taskDelay(1);到您的处理循环。这将在一个系统tick内阻塞线程,并启用优先级较低的线程(如tShell)运行。
  • 生成比shell优先级低的线程(例如110)来强制它在后台运行。

根据场景,我推荐后者,因为根据您的任务添加taskDelay(1);可能会显着减慢处理速度(并且使用tickSet(..)将系统tick增加到1000以上的值会显着增加中断负载)。另一方面,如果您降低优先级,则任务将运行,除非更高优先级的任务(例如shell)准备运行。在这种情况下,您的任务将被中断,直到更高优先级的任务完成处理(例如,您的终止命令被执行)。