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

很多朋友长时间使用裸机编程,切换过来学习rtos,就对其中很多概念产生了误解。
1写在前面
大部分人开始学习rtos实时操作系统时,对rtos中的一些概念都不太理解。
一上来就是临界段、调度、信号量、互斥锁等这些概念,相信大部分都是是懵的。
我想说,不太懂这些概念很正常,一下子懂了,我倒反而觉得不正常。
2什么是多任务
这里大部分人应该都是从裸机阶段过来的,裸机系统一般也称之为单任务系统、轮询系统或前后台系统。
这个概念相信大家都能明白,轮询就是在一个大while循环里执行。前后台系统就是在执行while时,有中断(前台)响应的系统。
int main(void){/*初始化*/ while(1) {/*循环处理多项事情 */ }}
那么,什么是多任务呢?
当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。
因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。
---来自百度百科
初学者可以理解为:有类似上面的多个轮询系统。
如下代码,将大while中的多项事情,分为几个事情,分别处理。
void task1(void){ /* 初始化 */ while(1) { /* 处理事情1 */ }} void task2(void){ /* 初始化 */ while(1) { /* 处理事情2 */ }}
这里就要牵涉到各个任务之间的切换:任务调度。
3任务调度
说任务调度之前,先说一插曲:
我开始学rtos时,觉得cpu这么短时间(1ms)在各个任务之间来回切换,而且切换还需要执行那么多代码,这样cpu还能执行多少代码啊?
其实,我当时太低估了处理器的能力。
拿stm32f103跑72m来说,1ms时间可以执行的代码有多少,你们心里有概念吗?
沿着这个问题,大家深思,其实都能明白,区区那切换(任务调度)的代码对于cpu速度来说,可以忽略(当然,这个相对)。
任务调度
任务调度可以分抢占调度和轮询调度。
在rtos中,为了使任务得到实时响应,一般使用抢占调度方式,我们拿ucos为例:
你会发现只程序执行过程中,如果有高优先级任务带来,高优先级任务就会打断低优先级任务。
直到高优先级任务执行完,低优先级任务才得到相应。
这里有人可能会问:如果高优先级一直,或者长时间执行可以吗?
答案是:no
这里就关系到任务优先级分配,以及任务设计问题。
一般来说,高优先级任务是在等待一个事件的触发,执行一件紧急,而不会太耗时的事情。
太耗时任务一般留给低优先级任务,在系统不忙时慢慢处理。
调度过程
我们设置系统滴答为1ms时间,那么系统就会间隔1ms检查一次就绪任务中优先级更高的任务。
这个1ms滴答是由定时器中断产生,一般像在stm32由内核滴答定时器产生。
如上图,他在(2)的位置就检测到有更高优先级任务(7)就绪,此时就会跳转到任务(7)去执行。

摆脱智能家电变偷窥狂的五大方法
基于嵌入式WinCE设备与LPC935单片机CAN通信设计
基于串行总线的热量表设计
为架构下一代高速无线网络做贡献,村田推出毫米波(60GHz)RF天线模块
保时捷MissionE将于2019年上市 800V充电口15分钟可充80%电量
RTOS实时操作系统怎么执行多任务的?
智能开发者大会——做足生态系统的设备环节
大陆攻克车载应用障碍 推出全新互联网解决方案
协作机器人发展迅速,库卡LBR iiwa成为领军者
8种值得应用开发者关注的增强现实工具包
区块链在交易市场是什么地位
BGP路由错误已导致CenturyLink联网服务的大规模故障
新大陆固定式条码扫描器,可快速地识读一维或二维条码
电视面板价格近期将趋稳,旺季降临需求回暖
我国首套深海伽玛核辐射探测谱仪在南海成功完成海试
华为荣耀10明夏发布,配置没的说,外观却有点奇怪
直接甲醇燃料電池
什么是光纤跳线?什么是尾线?有何区别?
微软HoloLens 2开发版正式在美国上市:售价约23412元,总价值31773元
Imagination举行媒体分享会:未来将进一步加大中国区投入