vxWorks 任务块 shell 命令输入

vxWorks task blocks shell command input

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

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

VxWorks 调度程序是基于优先级的。任务按先到先得的原则执行(默认情况下禁用循环法)。

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

你主要有以下选择:

  • taskDelay(1); 添加到您的处理循环中。这会在一个系统滴答中阻塞您的线程,并使具有较低优先级的线程(如您的情况下的 tShell)启用 运行.
  • 生成优先级低于 shell 的线程(例如 110)以强制它 运行 在后台运行。

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