硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4478|回复: 1
收起左侧

[QQ群问题解答] 这一段代码,琢磨了很久硬是没看懂(UCOS中的OSTaskDel())

[复制链接]

92

主题

76

回帖

92

积分

初级会员

积分
92
发表于 2014-4-2 10:49:41 | 显示全部楼层 |阅读模式
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--;
                }
......
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2014-4-3 19:44:50 | 显示全部楼层
1.  由于这个任务是要被删除的,这里是为了防止任务被删除后,如果程序中有resume,也即是将任务从挂起状态恢复的函数。
     所以就将这个任务的状态设置为就绪。
2. 加入调度锁是为了防止执行函数OS_Dummy(); 时发生任务切换。
3. 函数OS_Dummy(); 的作用是:有些处理器全局中断的切换需要一定的时间。这个相当于一个简短的延迟函数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 21:38 , Processed in 0.144670 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表