taskDelay(0)的特殊用法
(2010-08-01 19:27:52)
标签:
it |
分类: VxWorks |
根据上一篇博文 http://blog.sina.com.cn/s/blog_4ce2cdfa0100khrg.html
其实,当调用taskDelay(0)时,首先,它不会导致更低优先级的任务获得CPU控制权;只有具有相同优先级的就绪任务时才会发生上下文切换。taskDelay(0)本质上是将当前任务放到该优先级队列的尾部,如果该任务是本队列中的唯一任务时,则该任务将保持CPU控制权。
taskDelay(0) --> Q_REMOVE & Q_PUT --> windExit():
taskCode:
if (taskIdCurrent == (WIND_TCB *) Q_FIRST (&readyQHead)) //说明队列中只有一个任务
status = _sigCtxSave(&(taskIdCurrent->regs));
......
所以,taskDelay(0)时,同一优先级的任务中只有当前任务唯一一个,那么该任务将保持CPU控制权,并不发生上下文切换!!!