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)已准备好 运行。在这种情况下,您的任务将被中断,直到更高优先级的任务完成处理(例如,您的终止命令被执行)。
我正在生成一个 vxworks 任务(优先级为 99 的 taskSpawn)。该任务正在不断地处理数据。如果任务运行,我无法在 vxworks shell 中输入任何命令。 tShell 任务的优先级为 105。
那么我怎样才能在 shell 中输入任何命令呢?我有一个命令来停止任务进一步处理数据。
VxWorks 调度程序是基于优先级的。任务按先到先得的原则执行(默认情况下禁用循环法)。
因此,如果您的任务 运行 持续运行,它会阻止所有优先级较低的任务(在 VxWorks 中,较高的数字 = 较低的优先级),因为调度程序首先选择 运行 的较高优先级任务。
你主要有以下选择:
- 将
taskDelay(1);
添加到您的处理循环中。这会在一个系统滴答中阻塞您的线程,并使具有较低优先级的线程(如您的情况下的 tShell)启用 运行. - 生成优先级低于 shell 的线程(例如 110)以强制它 运行 在后台运行。
根据具体情况我推荐后者,因为根据您的任务添加 taskDelay(1);
可能会显着减慢处理速度(使用 tickSet(..)
将系统节拍增加到 1000 以上的值会显着增加中断负载).另一方面,如果您降低优先级,您的任务将 运行 除了更高优先级的任务(例如 shell)已准备好 运行。在这种情况下,您的任务将被中断,直到更高优先级的任务完成处理(例如,您的终止命令被执行)。