阅读:1475回复:2
任务调度问题,请大侠支招!
偶创建了4个任务t1, t2, t3, t4. 任务t1 和t2 的优先级相同,t3低于t1. t4低于t3, 如下:
优先级: t1 = t2 > t3 > t4 关系:t2, t3, t4 是由t1创建的任务,t1是主任务。 四个任务共用一段受互斥的二进制信号量保护的临界区代码(一个全局的数组变量)。 互斥信号量创建使用的是优先级队列. t1,t2, t3, t4 ,用的都是 semTake(semMutex, WAIT_FOREVER); 问题描述:绝大部分的情况下,四个任务运行都非常的正常。而有时在程序运行后,t2就永远不被执行,用shell的-〉i 命令观察各任务的状态,t2 大部分是处于pend状态,而偶尔处于ready状态。t1 大部分是处于ready状态, 偶尔处于pend或pend + T状态。t3, t4在一切情况下都运行正常。 问题: 1:既然t1,t2的优先级相同,且t2有时也处于ready状态,为什么t2有时会永远不被执行? 2:在不正常的情况下,t2的优先级大于t3和t4,为什么t3,和t4能够被执行而t2却永远不被执行? |
|
沙发#
发布于:2004-05-21 09:31
在t1,t2中都加上taskDelay()语句试试!
|
|
板凳#
发布于:2004-06-21 18:59
请问taskDelay(0)应该加在何处,是加在semTake()之前还是之后?
|
|