金牌会员
 
- 积分
- 2305
- 金钱
- 2305
- 注册时间
- 2017-7-6
- 在线时间
- 280 小时
|
发表于 2017-10-19 14:49:35
|
显示全部楼层
楼主,你看下OSTimeDly()的源码,前面就对锁嵌套次数进行判断,如果调度器上锁 直接返回错误的。因为OSTimeDly()本质是延时并开始任务调度。如果你上锁肯定不行 [mw_shl_code=c,true]void OSTimeDly (OS_TICK dly,
OS_OPT opt,
OS_ERR *p_err)
{
CPU_SR_ALLOC();
#ifdef OS_SAFETY_CRITICAL
if (p_err == (OS_ERR *)0) {
OS_SAFETY_CRITICAL_EXCEPTION();
return;
}
#endif
#if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0u
if (OSIntNestingCtr > (OS_NESTING_CTR)0u) { /* Not allowed to call from an ISR */
*p_err = OS_ERR_TIME_DLY_ISR;
return;
}
#endif
if (OSSchedLockNestingCtr > (OS_NESTING_CTR)0u) { /* Can't delay when the scheduler is locked */
*p_err = OS_ERR_SCHED_LOCKED;
return;
}[/mw_shl_code] |
|