uocs实时操作系统学习 4
-
-
陌路绝途
- LV5工程师
-
| 2014-06-18 18:02:41
- 浏览量 849
- 回复:5
3.1.8 调度器上锁和开锁
调度器上锁函数 OSSchedlock()的功能是用于禁止任务的调度,使任务保持对cpu的控制权。调度器开锁函数OSSchedUnlock()的功能是解除对任务调度的禁止。
调度器的开锁和上锁实现的原理是:对全局变量锁定嵌套计数器OSLockNesting进行操作的,OSLockNesting跟踪OSSchedLock()函数被调用的次数,允许嵌套深度达255层。调度器上锁即对变量OSLockNesting进行加1的操作,开锁即对OSLockNesting减1的操作。
空闲任务
空闲任务OSTaskIdle()是ucos必不可少的系统函数,当没有其他任务进入就绪态时,该任务立即转入运行态。空闲任务的优先级永远设为最低,即OS_LOWEST_PRIO永远不被挂起,也永远不能被删除。
void OSTaskIdle(void *pdata)
{
pdata=pdata;
for(;;){
OS_ENTER_CRITICAL();
OSIdleCtr++;
OS_EXIT_CRITICAL();
}
3.1.8 调度器上锁和开锁
调度器上锁函数 OSSchedlock()的功能是用于禁止任务的调度,使任务保持对cpu的控制权。调度器开锁函数OSSchedUnlock()的功能是解除对任务调度的禁止。
调度器的开锁和上锁实现的原理是:对全局变量锁定嵌套计数器OSLockNesting进行操作的,OSLockNesting跟踪OSSchedLock()函数被调用的次数,允许嵌套深度达255层。调度器上锁即对变量OSLockNesting进行加1的操作,开锁即对OSLockNesting减1的操作。
空闲任务
空闲任务OSTaskIdle()是ucos必不可少的系统函数,当没有其他任务进入就绪态时,该任务立即转入运行态。空闲任务的优先级永远设为最低,即OS_LOWEST_PRIO永远不被挂起,也永远不能被删除。
void OSTaskIdle(void *pdata)
{
pdata=pdata;
for(;;){
OS_ENTER_CRITICAL();
OSIdleCtr++;
OS_EXIT_CRITICAL();
}