以前只是知道每个task的格式是
void mystask(void *pd)
{
while(1)
{
//your code
OSTimeDly(Nticks);
}//while(1)
}//void mytask(void *pd)
实际上,OSTimeDly(Nticks);里就包含了一次任务调度,否则任务是不会自己进行调度的。而调度的程序OS_Sched()中就只是查找出优先级最高的已经就绪的任务。但是对于怎么样情况下任务才被设置为就绪台我一直不理解,后来在OSTimeTick()中找到了答案:
while(ptcb->OSTCBPrio!=OS_IDLE_PRIO)//历遍所有的任务
{
if(pctb->OSTCBDly !=0)
{
if(--pctb->OSTCBDly ==0)//延时结束,就把任务设置为就绪态
{
//省略
}
}
}