mqx 任务调度

    调度任务

    MQX提供如下任务调度策略:
    a),FIFO(先来先服务)
    b),时间片轮循(RR)
    c),使用任务队列
    第三种为可选组件,可以不做讨论。系统默认FIFO,同时,也可以通过在任务模板列表中指定任务属性来改变任务调度策略,倒数第三个参数。

    FIFO(先来先服务)

    是基于优先级抢占机制的调度方式,运行的任务是拥有最高优先级且等待时间最长的那个任务。当发生以下任意一种情况时,活动任务停止运行: 
(1)由于调用了 MQX 阻塞功能函数,活动任务主动放弃处理器。 
(2)产生了一个比活动任务优先级高的中断。 
(3)更高优先级的任务已经处于就绪状态。

    RR调度

    RR 调度即时间片轮询调度方式,其将调度等待时间最长且未消耗自身时间片的任务。RR 调度的特点在于每个轮询任务有最长时间限制(时间片),在此时间内该任务可以被激活。

    当一个活动的轮询任务的时间片用完时,MQX 将会保存该任务的现场参数,执行切换操作,并检查就绪队列选择优先级最高的任务进入激活状态。MQX 将已过期的任务放到任务就绪队列的末尾,这样就可以开始控制就绪队列中的下一个任务。如果在就绪队列中没有其他的任务,则到期的任务将继续运行。 在RR调度策略中,相同优先级的任务将以一种时间均等的方式共享处理器时间。如果多个具有相同优先级的任务进入就绪状态,则就绪队列中的最前面的任务将被激活。

    任务切换

   通过调用_time_delay(), _sched_execute_scheduler_internal()。MQX中的_sched_execute_scheduler_internal等系统服务主要由执行调度(SVC_RUN_SCHED)(SVC_TASK_BLOCK)(SVC_TASK_SWITCH)构成,他们通过执行svc #num;指令触发SVC中断,在_svc_handler中断服务例程中处理。在MQX中num服务号1为执行调度,2为任务阻塞,3为任务切换。SVC触发后必须立即得到响应,而PendSV不同,它可以像普通中断一样被推迟执行,推迟方法是往PendSV挂起寄存器中写1,推迟后优先级不够高则等待。

    两个异常,第一个是SVC,另一个是PendSV。这两个异常都拿来给用户自定义用的,前一个一般用于系统调用,后一个一般用于任务切换。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值