ucosii 的状态切换问题

2019-08-14 05:54发布

[mw_shl_code=c,true]void  OSTimeDly (INT32U ticks)
{
    INT8U      y;
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr = 0u;
#endif



    if (OSIntNesting > 0u) {                     /* See if trying to call from an ISR                  */
        return;
    }
    if (OSLockNesting > 0u) {                    /* See if called with scheduler locked                */
        return;
    }
    if (ticks > 0u) {                            /* 0 means no delay!                                  */
        OS_ENTER_CRITICAL();
        y            =  OSTCBCur->OSTCBY;        /* Delay current task                                 */
        OSRdyTbl[y] &= (OS_PRIO)~OSTCBCur->OSTCBBitX;
        if (OSRdyTbl[y] == 0u) {
            OSRdyGrp &= (OS_PRIO)~OSTCBCur->OSTCBBitY;
        }
        OSTCBCur->OSTCBDly = ticks;              /* Load ticks in TCB                                  */
        OS_EXIT_CRITICAL();
        OS_Sched();                              /* Find next task to run!                             */
    }
}[/mw_shl_code]

ucosii任务切换  执行该语句不应该是切换到等待状态了吗?我怎么找不到切换的代码啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
taizonglai
1楼-- · 2019-08-14 07:18
最下面那一段代码,if(ticks>0)开始到最后!将任务从就绪表中去除,然后设置延时时间,最后调用OS_Sched()切换任务
caokangchun
2楼-- · 2019-08-14 11:47
怎么没人回答呢   难道我理解错了?
caokangchun
3楼-- · 2019-08-14 15:32
zuozhongkai 发表于 2017-8-24 17:25
最下面那一段代码,if(ticks>0)开始到最后!将任务从就绪表中去除,然后设置延时时间,最后调用OS_Sched() ...

我是说它没修改TCB里面的OSTCBStat
可能我理解错了吧,我以为应该是修改了这个值才是任务状态的切换

一周热门 更多>