g47603690 发表于 2010-2-20 09:40:21

这一段代码,琢磨了很久硬是没看懂(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--;
                }
......
}

xtaozi001 发表于 2010-3-4 12:22:37

我在看的一本书上是这样解释的,我才看,也不是很懂,我把它写下来:
设置等待时间为0是为了防止系统时钟中断更新此值;
设置成ptcb->OSTCBStat = OS_STAT_RDY;防止此任务再次回复执行
if (OSLockNesting < 255) {      //这里是说禁止上下文切换,即禁止任务调度
            OSLockNesting++;                     
}            
退出临界状态,运行中断
空执行,等待一个时间周期
等等等。。。。太多不好打了!
页: [1]
查看完整版本: 这一段代码,琢磨了很久硬是没看懂(UCOS中的OSTaskDel())