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

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

3天内不再提示

分析RTOS实现多任务调度的基本原理

strongerHuang 来源:嵌入式专栏 作者:嵌入式专栏 2021-07-27 15:59 次阅读

很多朋友长时间使用裸机编程,切换过来学习RTOS,就对其中很多概念产生误解。

大部分人开始学习RTOS实时操作系统时,对RTOS中的一些概念都不太理解。

一上来就是临界段、调度、信号量、互斥锁等这些概念,相信大部分初学者都是懵的。

不太懂这些概念很正常,一下子懂了,我倒反而觉得不正常。

1什么是多任务

这里大部分人应该都是从裸机阶段过来的,裸机系统一般也称之为单任务系统、轮询系统或前后台系统。

这个概念相信大家都能明白,轮询就是在一个大while循环里执行。前后台系统就是在执行while时,有中断(前台)响应的系统。

int main(void){ /* 初始化 */ while(1) { /* 循环处理多项事情 */ }}

那么,什么是多任务呢?

当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。

因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。

---来自百度百科

初学者可以理解为:有类似上面的多个轮询系统。

如下代码,将大while中的多项事情,分为几个事情,分别处理。

void Task1(void){ /* 初始化 */ while(1) { /* 处理事情1 */ }}

void Task2(void){ /* 初始化 */ while(1) { /* 处理事情2 */ }}

这里就要牵涉到各个任务之间的切换:任务调度。

2任务调度

说任务调度之前,先说一插曲:

我开始学RTOS时,觉得CPU这么短时间(1ms)在各个任务之间来回切换,而且切换还需要执行那么多代码,这样CPU还能执行多少代码啊?

其实,我当时太低估了处理器的能力。

STM32F103跑72M来说,1ms时间可以执行的代码有多少,你们心里有概念吗?

沿着这个问题,大家进一步思考其实都能明白,区区那切换(任务调度)的几行代码对于CPU速度来说,这个处理时间可以忽略不计(当然,这是相对高速处理而言。如果低频的处理器,这个时间可能相对较长)。

任务调度

任务调度可以分抢占调度和轮询调度。

在RTOS中,为了使任务得到实时响应,一般使用抢占调度方式,我们拿UCOS为例:

0753a0c2-eb96-11eb-a97a-12bb97331649.jpg

你会发现只程序执行过程中,如果有高优先级任务带来,高优先级任务就会打断低优先级任务。

直到高优先级任务执行完,低优先级任务才得到相应。

这里有人可能会问:如果高优先级一直或长时间执行可以吗?

答案是:NO

这里就关系到任务优先级分配,以及任务设计问题。

一般来说,高优先级任务是在等待一个事件的触发,执行一件紧急,而不会太耗时的事情。

太耗时任务一般留给低优先级任务,在系统不忙时慢慢处理。

调度过程

我们设置系统滴答为1ms时间,那么系统就会间隔1ms检查一次就绪任务中优先级更高的任务。

这个1ms滴答是由定时器中断产生,一般像在STM32由内核滴答定时器产生。

如上图,他在(2)的位置就检测到有更高优先级任务(7)就绪,此时就会跳转到任务(7)去执行。

编辑:jq

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

    关注

    20

    文章

    804

    浏览量

    119161

原文标题:RTOS实现多任务调度的基本原理

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

收藏 人收藏

    评论

    相关推荐

    STM32 简单多任务调度

    STM32的开发目前大多数还开处于“裸奔”的阶段,处于开发成本的考虑,可能还未嵌入任何的RTOS系统,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理,在main函数中你可能会写成如下
    发表于 03-09 15:59

    STM32 简单多任务调度的方法与程序例程

    处于“裸奔”的阶段,处于开发成本的考虑,可能还未嵌入任何的RTOS系统,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理,在main函数中你可能会写成如下方式:int main(void
    发表于 09-05 14:39

    RTOS多任务同步和通讯

    、邮箱、事件标记、管道、信号和条件变量等。深入理解和实现RTOS深入理解和实现RTOS_连载6_多任务同步和通讯.pdf (379.46 K
    发表于 02-18 06:35

    RTOS多任务机制应用演示

    的执行路径。深入理解和实现RTOS深入理解和实现RTOS_连载5_多任务机制应用.pdf (247.18 KB )
    发表于 02-17 23:30

    在STM32下完成FreeRTOS的多任务程序开发

    ---------FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。(二)FreeRTOS基本原理---------
    发表于 08-09 07:27

    实时多任务操作系统(RTOS

    多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持多任务的操作系统,比起单任务系统它的功能增强了许多。当
    发表于 08-24 06:34

    RTOS中的多任务切换怎么实现

    RTOS中的多任务切换怎么实现
    发表于 11-30 07:23

    RTOS中的多任务切换的相关资料分享

    函数四.总流程五.结果六.后记(含代码链接)一. 简介  RTOS中的多任务切换是操作系统与裸机编程的一个非常大的区别,一般逻辑变成运行在一个循环内,裸机编程很难实现两个事件的并行(这里的并行指的是
    发表于 12-06 07:08

    如何使用Tracealyzer理解多任务调度

    ,可能会阻止低优先级任务的执行,使其无法得到响应。分析RTOS应用中的任务优先级和运行时行为,需要记录和可视化多任务
    发表于 12-17 16:01

    如何去实现一种基于ARM9的多任务抢占式调度器设计

    本文档以ARM9(三星 2410/2440)为平台,介绍一个多任务抢占式调度器------抢占式任务调度,提供延时,挂起,恢复任务操作。最精
    发表于 04-14 09:14

    网格任务调度算法研究

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

    基于DSP的实时多任务调度内核设计

    基于DSP的实时多任务调度内核设计
    发表于 10-19 15:30 7次下载
    基于DSP的实时<b class='flag-5'>多任务</b><b class='flag-5'>调度</b>内核设计

    RTOS实时操作系统怎么执行多任务的?

    RTOS实时操作系统中是怎样实现多任务的?
    的头像 发表于 03-03 13:49 4522次阅读
    <b class='flag-5'>RTOS</b>实时操作系统怎么执行<b class='flag-5'>多任务</b>的?

    DSP实时多任务调度的解决方案

    本文阐述了一个用于DSP的简洁而实用的实时多任务调度内核的实现方法。DSP由于其架构的特殊性,在任务调度方面与
    的头像 发表于 03-24 15:22 4573次阅读

    STM32 简单多任务调度的方法与程序例程

    多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持多任务的操作系统,比起单任务系统它的功能增强了许多。当
    发表于 12-22 19:04 13次下载
    STM32 简单<b class='flag-5'>多任务</b><b class='flag-5'>调度</b>的方法与程序例程