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

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

3天内不再提示

如何基于时间片论法的任务调度模式充分利用MCU的资源

strongerHuang 来源:大橙子疯嵌入式 作者:大橙子疯嵌入式 2022-12-14 09:52 次阅读

本文介绍如何基于时间片论法的任务调度模式充分利用MCU的资源,姑且先称这种方式为时间片差分调度法。

充分利用MCU的资源指的是在不影响原有的函数调度情况下合理进行分配,避免MCU大部分时间处于空跑状态(即大部分时间没有调度任何的功能函数,只是在不停地判断时间状态,从而造成的资源浪费),同时提高每个任务的调度周期的命中率(按时准点执行)

背景

时间片论法不比操作系统,操作系统可以通过任务优先级抢占当前正在执行的低优先级任务,或者高优先级任务主动睡眠释放MCU资源以便低优先级的任务可以正常执行;时间片论法必须等待当前任务执行完成后才能执行下一个任务(中断除外)。


因此,由于时间片论法的特性,很难保证某些任务能够及时得到调度运行,特别是所需要的调度任务多的情况下,常常出现不能及时调度的问题(虽然整体调度周期不变),从而影响所需要的功能,常见的做法可能通过定时中断触发的方式去执行,可是碰到一些任务函数执行时间稍微长的就会影响中断的响应等。


可以看下面的函数调度时长图,每个刻度为200us(以下称节拍),调度单位为1ms,只以200us以上的任务举例,方便进行理解

152885c0-7b4e-11ed-8abf-dac502259ad0.png

从上述图中可知以下信息

图中一共有五个任务函数,每个任务函数的执行时间不定

任务1(黄色)周期为5ms

任务2(红色)周期为6ms

任务5(紫色)周期为5ms

任务4(蓝色)周期为12ms

任务5(绿色)周期为15ms

同一时刻触发任务调度的执行时的顺序(调度函数的顺序即可任务默认优先级):1>2>3>4>5

第25ms时任务1的调度慢了一个节拍,原因是任务2和4的调度总时长超过了调度单位时长

除了任务1大部分时间都能及时被调度,其他任务并不能被及时调度,虽然周期不变,但命中率不高(甚至等于0)

其中存在周期性的几个调度单位大部分时间处于空跑状态

…等其他仔细观察的可知信息,这里就不多说了

从获取的信息可知,大部分任务虽然整体周期没变,但是几乎很少有低优先级的任务有较高的命中率,这样就导致某些功能需要较高的命中率同时执行时间相对较长(不能放在中断中的任务函数)就不能正常工作。

如何优化

在优化之前,首先看下面这个有一定规律的函数调度时长图

153f5660-7b4e-11ed-8abf-dac502259ad0.png

还是五个任务,而规律就是函数任务公约数=最小调度周期任务,即5ms(假设小于5ms的任务大都执行时间非常短,在此可忽略不计)

任务1(黄色)周期为5ms

任务2(红色)周期为10ms

任务5(紫色)周期为20ms

任务4(蓝色)周期为10ms

任务5(绿色)周期为20ms

图中所展示的任务调度命中率也不高,也存在周期性的几个调度单位大部分时间处于空跑状态

看一下优化前后的对比图,虽然还是存在大部分时间处于空跑状态,但是命中率提高到了100%

只要保证每个任务函数耗时小于调度单位,那么就能做到命中率 100%

184bbe7a-7b4e-11ed-8abf-dac502259ad0.png

如何实现的?
从优化后的图中可以了解到,第一个时刻调度的时候只有任务1,第二个时间调度只有任务2,以此类推,就可以在一定程度上避开同一时刻多个任务需要同时等待调度,从而引发的拥堵。

可以通过每个任务计时器的倒计时初值进行调整,从而达到每个时间调度只运行一个任务的目的,提高任务的命中率。

那么接下来按照上面提到的规律去优化刚开始的那个,主要有两点:

在可接受范围内调整任务的周期,尽量保证任务函数任务公约数=最小调度周期任务

可以理解称任务公约数等于多少就代表可以在初值上类推多少个任务进行错开初次执行;可以忽略部分函数耗时特别短的任务

调整每个任务倒计时器的初值,尽量错开拥堵时刻

任务多的情况下只能够尽量避免,从而提高命中率,通过每个任务调度周期和执行时长进行推算,得到每个任务的最佳的初值

根据以上两点对上述调度任务进行优化如下:

五个任务函数在可接受范围内调整任务周期后,同时调整初值
- 任务1(黄色)周期为5ms
- 任务2(红色)周期为5ms
- 任务5(紫色)周期为5ms
- 任务4(蓝色)周期为10ms
- 任务5(绿色)周期为15ms

得到对比图:

185b6fa0-7b4e-11ed-8abf-dac502259ad0.png

此次优化将充分地利用了每个时间片的资源,虽然某一段时间内的空跑时间总和一样,但是实际上将空跑的时间进行了分散,提高了资源的使用率,从而让每个任务的命中率提高到100%。

审核编辑 :李倩

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

    关注

    146

    文章

    16852

    浏览量

    349801
  • 函数
    +关注

    关注

    3

    文章

    4276

    浏览量

    62303

原文标题:时间片论法-优化方案

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    INA199如何解读和利用电流感应放大器的输出摆幅规格,以便我能够充分利用电流测量结果?

    INA199如何解读和利用电流感应放大器的输出摆幅规格,以便我能够充分利用电流测量结果?
    发表于 08-07 07:07

    如何利用AI进行提升自我呢?

    利用AI进行学习是一个高效且富有创新性的过程。以下是一些建议,帮助你充分利用AI进行学习: 选择适合的AI学习工具 : 深度学习框架 :如飞桨(PaddlePaddle)框架,它提供了丰富的API
    的头像 发表于 07-19 10:46 457次阅读

    鸿蒙开发接口资源调度:【@ohos.workScheduler (延迟任务调度)】

    开发者在开发应用时,通过调用延迟任务注册接口,注册对实时性要求不高的延迟任务,该任务默认由系统安排,在系统空闲时根据性能、功耗、热等情况进行调度执行。
    的头像 发表于 06-04 10:01 823次阅读
    鸿蒙开发接口<b class='flag-5'>资源</b><b class='flag-5'>调度</b>:【@ohos.workScheduler (延迟<b class='flag-5'>任务</b><b class='flag-5'>调度</b>)】

    浅析FreeRTOS任务调度器的三种调度算法和应用

    FreeRTOS在MCU领域应用非常广泛,今天就给大家讲解一下FreeRTOS调度器中的三种调度算法,以及在瑞萨RZ/T2L MPU中的应用。
    的头像 发表于 05-10 14:02 6195次阅读
    浅析FreeRTOS<b class='flag-5'>任务</b><b class='flag-5'>调度</b>器的三种<b class='flag-5'>调度</b>算法和应用

    打造优质户用逆变器的关键步骤与方法

    固德威逆变器型号齐全,能满足不同屋顶和不同容配比的设计,不浪费一屋顶,且能充分利用逆变器。
    的头像 发表于 04-26 09:46 420次阅读
    打造优质户用逆变器的关键步骤与方法

    STM32F103 FreeRTOS任务调度异常的原因?

    ) { vTaskDelay(500); //延时函数(任务调度) printf(\"Task1rn\");//串口打印 } } void Task2_Task(void
    发表于 04-16 06:24

    什么是时间轮转调度时间轮转调度算法基本原理

    进程切换时间一定的情况下,如果时间片长度设定的越小时,这种浪费更明显。所以,时间片长度与CPU利用率是一对不可调和的矛盾,必须处理好它们之间的关系。
    的头像 发表于 03-22 14:54 3056次阅读

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

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

    什么是多核多线程?多核多线程如何提高程序的运行效率?

    单线程无法充分利用多核处理器的并行计算能力。
    的头像 发表于 02-20 10:22 1199次阅读

    鸿蒙OS 分布式任务调度

    鸿蒙OS 分布式任务调度概述 在 HarmonyO S中,分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用定义统一的能力基线、
    的头像 发表于 01-29 16:50 436次阅读

    软件架构之时间

    首先来个demo,该demo是使用电脑开两个线程:一个线程模拟单片机的定时器中断产生时间轮询个时钟,另一个线程则模拟主函数中一直运行的时间轮询
    的头像 发表于 01-18 09:29 490次阅读
    软件架构之<b class='flag-5'>时间</b>轮<b class='flag-5'>片</b>法

    如何充分利用单片机(MCU)的非易失性存储器呢?

    如何充分利用单片机(MCU)的非易失性存储器 单片机(MCU)的非易失性存储器(NVM)是存储数据和程序的重要组成部分。它可以保留数据,即使在断电或复位后也不会丢失。为了充分利用
    的头像 发表于 12-15 10:10 1179次阅读

    MCU长耗时任务的优化策略

    MCU 裸机开发中,采用分时的方式进行多任务处理是一种常见的技术。
    的头像 发表于 11-21 09:39 621次阅读

    workflow异步任务调度编程范式

    ,workflow是一个异步任务调度编程范式,封装了6种异步资源:CPU计算、GPU计算、网络、磁盘I/O、定时器、计数器,以回调函数模式提供给用户使用,概括起来实际上主要是两个功能:
    的头像 发表于 11-09 09:42 458次阅读
    workflow异步<b class='flag-5'>任务</b><b class='flag-5'>调度</b>编程范式

    什么是Linux进程调度

    1、背景知识 1.1 什么是调度器 通常来说,操作系统是应用程序和可用资源之间的媒介。 典型的资源有内存和物理设备。但是CPU也可以认为是一个资源
    的头像 发表于 11-09 09:05 531次阅读
    什么是Linux进程<b class='flag-5'>调度</b>器