这一段代码,琢磨了很久硬是没看懂(UCOS中的OSTaskDel())
INT8U OSTaskDel(INT8U prio){
.......
ptcb->OSTCBDly= 0;
ptcb->OSTCBStat = OS_STAT_RDY; //为什么要把它置为就绪态,看书上的解释硬是没看懂
if (OSLockNesting < 255) {
OSLockNesting++; //这里为什么OSLockNesting加1; 然后退出临界段,做了个空操作OS_Dummy();然后又进入临界段,
} //然后OSLockNesting减1,这不就相当于什么都没做么,这段代码究竟有什么用呢
OS_EXIT_CRITICAL();
OS_Dummy();
OS_ENTER_CRITICAL();
if (OSLockNesting > 0) {
OSLockNesting--;
}
......
} 我在看的一本书上是这样解释的,我才看,也不是很懂,我把它写下来:
设置等待时间为0是为了防止系统时钟中断更新此值;
设置成ptcb->OSTCBStat = OS_STAT_RDY;防止此任务再次回复执行
if (OSLockNesting < 255) { //这里是说禁止上下文切换,即禁止任务调度
OSLockNesting++;
}
退出临界状态,运行中断
空执行,等待一个时间周期
等等等。。。。太多不好打了!
页:
[1]