ucos-iii学习之循环轮转调度及调度的内部实现

1.循环轮转调度
当多个任务有相同优先级时,uC/OS-III 允许每个任务运行规定的时间片。当任务没有用完分配给它的时间片时,它可以自愿地放弃CPU。
uC/OS-III 允许用户为每个任务设置不同的时间片。当任务被创建时,其时间片长度被设置。也可以在运行时调用 OSTaskTimeQuantaSet()修改。
2.调度的内部实现
OSSched()和 OSIntExit()。
OSSched()在任务级被调用,OSIntExit()在中断级被调用。
调度所需要的两个数据结构:位映像表和就绪列表。
(1)OSSched()
OSSched()通过扫描映像表OSPrioTbl[]找到就绪列表中优先级最高的位,确定好优先级后,索引到 OSRdyList[]并提取该记录中的首个TCB(OSRdyList[highest priority].HeadPtr)。
调度和上下文切换是运行在关中断的状态下的。
(2)OSIntExit()
中断级调度器代码。
(3)OS_SchedRoundRobin()
一任务的时间片期满,负责运行同优先级就绪的任务。
这个函数被OSTimeTick()或者 OS_IntQTask()调用。
3.总结
uC/OS-III 是可抢占的调度器,所以它总是执行优先级最高的就绪任务。
uC/OS-III 运行多个任务具有相同的优先级。这时,它可以被设置为循环轮转调度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值