【发布时间】:2015-08-18 12:30:03
【问题描述】:
我正在生成一个 vxworks 任务(taskSpawn 优先级为 99)。这个任务是不断地处理数据。如果任务运行,我将无法在 vxworks shell 中输入任何命令。 tShell 任务的优先级为 105。
那么我怎样才能在 shell 中输入任何命令。我有一个命令可以阻止任务进一步处理数据。
【问题讨论】:
标签: c++ shell multitasking vxworks
我正在生成一个 vxworks 任务(taskSpawn 优先级为 99)。这个任务是不断地处理数据。如果任务运行,我将无法在 vxworks shell 中输入任何命令。 tShell 任务的优先级为 105。
那么我怎样才能在 shell 中输入任何命令。我有一个命令可以阻止任务进一步处理数据。
【问题讨论】:
标签: c++ shell multitasking vxworks
VxWorks 调度程序是基于优先级的。任务按照先到先得的原则执行(默认情况下禁用循环)。
因此,如果您的任务连续运行,它会阻塞所有较低优先级的任务(较高的数字 = VxWorks 中的较低优先级),因为调度程序会选择优先级较高的任务首先运行。
要解决这个问题,您主要有以下选择:
taskDelay(1); 添加到您的处理循环中。这会阻止您的线程进行一个系统滴答,并使具有较低优先级的线程(如您的情况下的 tShell)运行。根据情况,我推荐后者,因为根据您的任务添加taskDelay(1); 可能会显着减慢处理速度(并且使用tickSet(..) 将系统滴答声增加到1000 以上的值会显着增加中断负载)。另一方面,如果您降低优先级,您的任务将运行,除非更高优先级的任务(例如外壳)准备好运行。在这种情况下,您的任务将被中断,直到更高优先级的任务完成处理(例如,您的终止命令被执行)。
【讨论】: