ChibiOS 同优先级周期调度问题

ChibiOS的任务如果优先级不同会按优先级来进行调度,高优先级的就绪任务能够block低优先级的

当2个任务的优先级相同时,ChibiOS的默认配置不支持周期轮训调度,此时就需要修改配置文件

我们可以观察os/rt/src/chschd.c文件中函数chSchDoReschedule的实现,可以看到里面涉及到一个特殊的参数配置:

CH_CFG_TIME_QUANTUM

该参数>0时,将会调用chSchReadyI函数从任务就绪队列中取出一个任务,由于这个队列是循环的,所以每个同等优先级的任务将能平等地被轮训到,以此完成了不同相等优先级任务的轮流调度(round-robin)

另外这个参数的值也是有意义的,其表示每个任务将拥有CH_CFG_TIME_QUANTUM个Tick周期的原子(相对于同等和低优先级的任务而言)时间,简而言之,就是相同优先级任务每次被轮训到时,持续的Tick数。例如,系统Tick周期是1000,表示1ms一个Tick,CH_CFG_TIME_QUANTUM值为2,若有两个优先级相同的任务,则每个任务都能持续运行2ms,然后被内核剥夺CPU权限,交给另一个任务运行2ms,周期执行。

另外,值得注意的是,该参数>0时,CH_CFG_ST_TIMEDELTA这个参数必须是0,否则将编译报错,这主要是这两种机制不兼容的缘故

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值