调度器上锁函数OSSchedlock()
的功能是用于禁止任务调度,使任务保持对CPU的控制权。调度器开锁函数OSSchedUnlock()
的功能是解除对任务调度的禁止。
调度器上锁和开锁的实现原理是:对全局变量锁定嵌套计数器OSLockNesting
进行操作,OSLockNesting
跟踪OS SchedLock()
函数被调用的次数,允许嵌套深度达255层。调度器上锁即对变量OSLockNesting
进行加1操作,开锁即对变量OSLockNesting
进行减1操作。
- 调度器锁定函数
OSSchedLock()
void OSSchedLock (void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
if (OSRunning == OS_TRUE) {