0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS任务调度器的三种调度算法讲解(上)

瑞萨MCU小百科 来源:瑞萨嵌入式小百科 2024-03-21 13:43 次阅读

瑞萨RZ/T2L MPU

RZ/T2L是一款高性能MPU,可通过EtherCAT实现高速、高精度的实时控制。RZ/T2L搭载最大频率为800MHz的Arm Cortex-R52内核以及与CPU紧密耦合的大容量内存(576KB),可以降低使用高速缓存存储器时出现的执行时间波动,并提供确定性与高速响应处理。

RZ/T2L在CPU内核、外设功能和LLPP(低延时外设端口)总线等方面具备与RZ/T2M无缝连接的硬件架构,可用于AC servo等更高性能的控制系统。此外,RZ/T2L提供了与瑞萨MPU和MCU可兼容、可扩展的软件平台。它使客户可以利用自己的软件资产进行新机型的开发。

4a88dcba-e740-11ee-a297-92fbcf53809c.png

RZ/T2L产品框图

1.任务状态和事件的概述

实际正在运行(使用处理时间)的任务处于运行态。在单个核心处理器上,在任何时候都只能有一个任务处于运行态。

没有实际运行,但既不处于阻塞态不处于挂起态的任务就是处于就绪态

处于就绪态的任务可被调度器选择,然后进入运行态。调度程序会始终选择最高优先级的就绪态任务进入运行态。

任务可以在阻塞态下等待事件,并在事件发生时自动移回就绪态。

时间事件发生在特定的时间,例如当阻塞时间过期时,通常用于实现周期性或超时行为。当任务或中断服务例程使用任务通知、队列、事件组或多种类型的信号量之一发送信息时,就会发生同步事件。它们通常用于需要同步的情况,例如数据同步。

2.配置调度算法

调度算法决定了调度器将哪个就绪态任务转换到运行态。

可以使用configUSE_PREEMPTION和configUSE_TIME_SLICING配置常量来更改算法。这两个常量都在FreeRTOSConfig.h中定义。

还有个配置常数configUSE_TICKLESS_IDLE也会影响调度算法,因为使用它会导致tick中断在很长一段时间内被完全关闭。configUSE_TICKLESS_IDLE是一个高级选项,专门用于必须最小化功耗的应用程序。configUSE_TICKLESS_IDLE在之后解说。

对于相同优先级的任务,FreeRTOS调度器依次选中相同优先级的任务进入运行态。这种轮流策略被称为‘Round Robin Scheduling’

‘Round Robin Scheduling’算法并不能保证同等优先级的任务之间运行相同的时间,只能保证同等优先级的“就绪”任务会依次进入“运行”态。

2.1

基于时间片的抢占式调度

如果按照如下配置:

configUSE_PREEMPTION 1

configUSE_TIME_SLICING 1

FreeRTOS调度器使用一种称为“基于时间片的固定优先级抢占式调度”的调度算法,这是大多数小型RTOS应用程序使用的调度算法。

固定优先级

被描述为“固定优先级”的调度算法不会改变分配给被调度任务的优先级,但也不会阻止任务本身改变自己的优先级或其他任务的优先级。

抢占式调度

在优先级高于运行态任务的任务进入就绪态时,调度器立即让这个高优先级的任务“抢占”运行态任务。被抢占意味着任务移出运行态并进入就绪态,并不是因为任务自己主动让出或者阻塞。

时间片

时间片用于在具有相同优先级的任务之间共享处理时间,即使任务没有显式地让步或进入阻塞状态。使用“时间片”的调度算法将在每个时间片结束时选择一个新任务进入运行状态,如果有其他与运行任务具有相同优先级的就绪状态任务。一个时间片等于两个RTOS tick中断之间的时间。

4aa564de-e740-11ee-a297-92fbcf53809c.png

上图演示了使用“基于时间片的固定优先级抢占式调度”算法抢占调度任务的调度过程。

task1是最高优先级的事件驱动任务,task2是中等优先级的周期性任务,task3是最低优先级的事件驱动任务,Idle task是空闲任务。

task1周期性运行,阻塞时,空闲任务就会运行,task3的事件到达就会抢占空闲任务,task3运行期间,如果task2的周期到了,因为task2优先级高就会抢占task3,task2运行完了再接着运行task2,task2运行期间,由于task1优先级高,一旦task1等待的事件到了就会抢占task2。

有相同优先级任务的情况:

4ab7b210-e740-11ee-a297-92fbcf53809c.png

task1是优先级最高的事件驱动任务,task2是和Idle task优先级相同的持续处理型任务。

task2和空闲任务就会轮流运行,而task1则可以抢占task2和空闲任务。

假如空闲任务里其实没做什么事情,我们想让和空闲任务相同优先级的Task2有更多的运行时间就可以配置configIDLE_SHOULD_YIELD。

如果configIDLE_SHOULD_YIELD设置为0,那么空闲任务将在整个时间片中保持运行状态,除非它被更高优先级的任务抢占。

如果configIDLE_SHOULD_YIELD设置为1,如果有其他空闲优先级任务处于就绪状态,那么空闲任务将主动让出运行时间。

4ac6582e-e740-11ee-a297-92fbcf53809c.png



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162000
  • ARM处理器
    +关注

    关注

    6

    文章

    346

    浏览量

    41324
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61349
  • ethercat
    +关注

    关注

    17

    文章

    442

    浏览量

    37693
  • 调度器
    +关注

    关注

    0

    文章

    95

    浏览量

    5161
收藏 人收藏

    评论

    相关推荐

    FreeRTOS任务调度器的三种调度算法讲解(下)

    配置如下时,调度算法就会变成不带时间片的抢占式调度
    的头像 发表于 03-21 13:46 610次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>任务</b><b class='flag-5'>调度</b>器的<b class='flag-5'>三种</b><b class='flag-5'>调度</b><b class='flag-5'>算法</b><b class='flag-5'>讲解</b>(下)

    改进的SEDF调度算法

    引入一比较机制来执行多处理间的负载平衡.当VCPU调度时,将就绪VCPU迁移到总运行时间最少的处理.仿真实验结果表明:IEDF
    发表于 04-24 10:03

    转:第14章 任务调度—抢占式,时间片和合作式

    调度方式FreeRTOS操作系统支持三种调度方式:抢占式调度,时间片调度和合作式
    发表于 08-30 09:55

    转第16章 FreeRTOS调度锁,任务锁和中断锁

    任务锁函数,但是使用FreeRTOS现有的功能有两实现方法:(1)通过给调度加锁实现利用FreeR
    发表于 09-01 07:45

    FreeRTOS如何使用delay作为系统延时、任务调度

    请教一个问题,最近在学习使用FreeRTOS,想像原子一样在delay.c里添加RTOS的系统支持,即使用tick时钟作延时。现在有几个问题:1、在启动任务调度前,如果调用了dela
    发表于 06-10 04:37

    请问FreeRTOS是如何实现调度的?

    最近入门RTOS,首先看书了解了合作式调度的应用,其基本思想是在主循环中不断执行调度函数,在SysTick中断中更新任务状态,程序我也大致看懂了。之后到了入门
    发表于 07-30 07:40

    调度的原理及其任务调度代码实现

    一、介绍调度是常用的一编程框架,也是操作系统的拆分多任务的核心,比如单片机的裸机程序框架,网络协议栈的框架如can网关、485网关等等,使用场合比较多,是做稳定产品比较常用的编程技
    发表于 02-17 07:07

    FreeRTOS时间片调度概述

    一、FreeRTOS时间片调度概述FreeRTOS支持多个任务同时拥有一个优先级,这些任务调度
    发表于 02-18 06:10

    网格任务调度算法研究

    网格任务调度算法是影响网格成功与否的关键技术之一。本文总结了网格计算系统的体系结构和特征,分析了网格任务调度
    发表于 08-14 10:27 10次下载

    Hadoop中任务调度算法的改进

    针对Hadoop0.20.0中任务调度算法存在的不足,提出一种基于改进遗传算法(IGA)的任务调度
    发表于 12-17 10:57 0次下载
    Hadoop中<b class='flag-5'>任务</b><b class='flag-5'>调度</b><b class='flag-5'>算法</b>的改进

    基于遗传加差分算法的云计算任务调度

    基于遗传加差分算法的云计算任务调度
    发表于 01-07 21:28 0次下载

    任务阈值调度算法

    针对当前云任务调度算法在密码云环境中无法实现任务实时处理的问题,提出一种基于滚动优化窗口的实时阈值调度方法。首先,将密钥调用环节融入密码
    发表于 11-24 17:08 5次下载
    云<b class='flag-5'>任务</b>阈值<b class='flag-5'>调度</b><b class='flag-5'>算法</b>

    异构多核处理器任务调度算法

    任务调度响应实时性方面表现优异,但却不适用于异构多核处理器环境。为此,提出一种高实时性任务调度算法HRSA。在Min-Min
    发表于 02-07 11:07 1次下载

    FreeRTOS时间片进行任务调度

    注意:①任务切换会存在时间片开销;FreeRTOS支持时间片,每个优先级可以支持无限多个任务,这些任务调度就是时间片
    发表于 12-23 20:02 0次下载
    <b class='flag-5'>FreeRTOS</b>时间片进行<b class='flag-5'>任务</b><b class='flag-5'>调度</b>​

    FreeRTOS调度器中的三种调度算法实践(上)

    在优先级高于运行态任务任务进入就绪态时,调度器立即让这个高优先级的任务“抢占”运行态任务。被抢占意味着
    发表于 03-21 13:45 100次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>调度</b>器中的<b class='flag-5'>三种</b><b class='flag-5'>调度</b><b class='flag-5'>算法</b>实践(上)