全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 处理器/DSP >

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

时间:2021-07-27 15:59

人气:

作者:admin

标签: RTOS 

导读:很多朋友长时间使用裸机编程,切换过来学习RTOS,就对其中很多概念产生误解。 大部分人开始学习RTOS实时操作系统时,对RTOS中的一些概念都不太理解。 一上来就是临界段、调度、信号...

很多朋友长时间使用裸机编程,切换过来学习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

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信