初级会员
- 积分
- 118
- 金钱
- 118
- 注册时间
- 2015-9-7
- 在线时间
- 8 小时
|
楼主 |
发表于 2015-10-22 13:22:22
|
显示全部楼层
在上楼中认为“正在运行的任务“可以是/也可以不是”就绪表中标记的任务”是正确的,但现在认为“正在运行中的任务肯定在就绪列表中有标记”。
在上楼中举的例子中,认为执行事件等待列表里优先级最高的任务时,此任务没有在就绪列表中标记。但现在认为,执行事件等待列表里优先级最高的任务之前应该将此任务在事件的等待列表中清楚并在就绪列表中进行了标记。这样一来,“正在运行中的任务肯定在就绪列表中有标记”了。
对于2.86和2.88版本的关于任务级调度器void OS_Sched (void)中OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; 位置的变动就好理解了。
void OS_Sched (void)
{
#if OS_CRITICAL_METHOD == 3u
OS_CPU_SR cpu_sr = 0u;
#endif
OS_ENTER_CRITICAL();
if (OSIntNesting == 0u) {
if (OSLockNesting == 0u) {
OS_SchedNew();
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; //2.88版本
if (OSPrioHighRdy != OSPrioCur) {
#if OS_TASK_PROFILE_EN > 0u
OSTCBHighRdy->OSTCBCtxSwCtr++;
#endif
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; //2.86版本
OSCtxSwCtr++;
OS_TASK_SW();
}
}
}
OS_EXIT_CRITICAL();
} |
|