《嵌入式应用技术》课件——第5讲 UCOSIII任务管理(3).pdf
《嵌入式技术应用》课程
uCOSIII操作系统学习
适用平台:STM32F10x
主讲教师:杜锋
《嵌入式技术应用》课程
目录
Contents
1
UCOSIII任务调度
2
UCOSIII任务切换
3知识目标
UCOSIII系统初始化和启动
了解知道
掌握了解
掌握理解
掌握
1.uCOSIII任务调度
可剥夺型任务调度
◆任务调度就是中止当前正在运行的任务转而去执行其他的任务。
◆UCOSIII是可剥夺型内核,因此当一个高优先级的任务准备就绪,并且此时发生了任务调度
,那么这个高优先级的任务就会获得CPU的使用权!
◆UCOSIII中的任务调度是由任务调度器来完成的,任务调度器有2种:
●任务级调度器OSSched();
●中断级调度器OSIntExit().。
◆当退出外部中断服务函数的时候使用中断级任务调度。
1.uCOSIII任务调度
任务调度点
●释放信号量或者发送消息,也可通过配置相应的参数不发生任务调度;
●使用延时函数OSTimeDly()或者OSTimeDlyHMSM();
●任务等待的事情还没发生(等待信号量,消息队列等);
●任务取消等待;
●创建任务;
●删除任务;
●删除一个内核对象;
1.uCOSIII任务调度
任务调度点
●任务改变自身的优先级或者其他任务的优先级;
●任务通过调用OSTaskSuspend()将自身挂起;
●任务解挂某个挂起的任务;
●退出所有的嵌套中断;
●通过OSSchedUnlock()给调度器解锁;
●用户调用OSSched();
●任务调用OSSchedRoundRobinYield()放弃其执行时间片;
1.uCOSIII任务调度
调度器上锁和解锁
◆当我们不希望发生任务调度,因为始终有一些代码的执行过程是不能被打断的。此时
我们就可以使用函数OSSchedLock()对调度器加锁;
◆当我们想要恢复任务调度的时候就可以使用函数OSSchedUnlock()给已经上锁的任务调度器
解锁。
1.UCOSIII任务调度
时间片轮转调度
◆UCOSIII允许一个优先级下有多个任务,每个任务可以执行指定的时间(时间片),然后轮到下
一个任务,这个过程就是时间片轮转调度,当一个任务不想在运行的时候就可以放弃其时间片。
◆时间片轮转调度器为:OS_SchedRoundRobin()。
◆时间片轮转调度示例:
任务时间片数
Task14
Task24
Task34
1.uCOSIII任务调度
时间片轮转调度示意图
时间片
TickISR12345678