初级会员

- 积分
- 190
- 金钱
- 190
- 注册时间
- 2017-5-18
- 在线时间
- 35 小时
|
1金钱
[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任务切换 执行该语句不应该是切换到等待状态了吗?我怎么找不到切换的代码啊?
|
最佳答案
查看完整内容[请看2#楼]
最下面那一段代码,if(ticks>0)开始到最后!将任务从就绪表中去除,然后设置延时时间,最后调用OS_Sched()切换任务
|