今天写代码将调度器上锁了以后执行一个函数,结果在函数里用OSTimeDly(ticks)延时失效,经过阅读源码得知本该无效。
源码分析
给调度器上锁:
void OSSchedLock (void)
{
if (OSRunning == TRUE) {
OS_ENTER_CRITICAL();
OSLockNesting++;
OS_EXIT_CRITICAL();
}
}
上面的函数将OSSchedLock()将OSLockNesting加1,而OSLockNesting是unsigned char类型的,
一般情况下OSLockNesting > 0 了(OSLockNesting自增前为255的话就为0);
任务延时:
void OSTimeDly (INT16U ticks)
{
INT8U y;
#if OS_CRITICAL_METHOD == 3