简单了解实时操作系统RTOS

   寒假学习第一天记录

1.裸机与RTOS的区别

由于本人学习RTOS是在Stm32单片机的基础上学习的,故以此举例,我们在开发Stm32单片机的时候一般的格式便是如下图所示

最先初始化各个模块,然后再在While(1)无限循环中放置各个函数运行,一个函数结束后便执行下一个函数,执行完一遍后便从头开始无限循环的执行。这就是裸机开发,而裸机开发有什么弊端呢?第一它执行任务太死板了,在无限循环中,只有一个函数结束后,下一个函数才能开始运行。假如因为某些原因,函数中存在Delay函数,在执行Delay的过程中,单片机的CPU什么事情都不做只是为了死等这个时间后继续执行这个函数。第二,在上述过程中,CPU只有执行完当前语句后才能执行下一个语句,假如当前语句耗时较长,那么下一个语句很长时间未得到响应可能会出现问题,例如在做一些平衡项目时,一般都要及时读取当前物体的姿态并通过改变电机以此维持物体平衡,如果读取前要执行的语句耗时较长则容易让物体失去平衡。(注:故实际裸机开发碰到这种问题一般都是利用中断执行读取姿态任务,但是中断函数本身不能耗时过长,否则容易出现问题,所以说读取任务的函数还是会放在死循环中,中断函数一般利用定时器时基单元置标志位来实现)。

存在以上问题后我们便想着利用RTOS提高CPU的利用率以及程序执行的实时性。引出RTOS,我们可以以自己日常生活来举例。例如情景:早上起床刚想喝水发现水壶中没有水了,我们便需要执行烧水的任务,当启动烧水后,等水烧开需要一段时间,在等待的时间我们往往会执行其他的任务例如刷牙洗脸,等水烧开了我们再完成烧水的最后动作,而等待烧水的过程就像函数中的Delay一样,所以说RTOS可以让函数在Delay的过程中执行其他函数。

再比如:我们打游戏的时候有人突然发信息给我们,这个时候我们打游戏吧朋友就被置之不理了,我们回信息吧,队友就被置之不理了。那如何解决呢?我们可以以极快的速度一会打游戏一会发信息,这样游戏系统既不会检测出你挂机,同时也不会辜负好友。而放在函数中也差不多,我们处理完一个函数再处理另一个函数显然有些偏心,我们可以利用RTOS以极快的速度处理每个函数,让每个函数都能得到极快的响应。

这就是简单的介绍二者的区别。

2.FreeRTOS的介绍

实时操作系统有很多种,freertos有很多优点,故使用度很高,freertos中可以把任务分成32种优先级,4种状态,而对任务的处理有3种方法,但是主要用的只有2种,剩下1种基本不使用。

优先级:这个很好理解,可以类比与stm32中的中断优先级,优先级高的优先完成任务。

任务状态:

              1.运行态:一个任务当他被执行时被称为运行态

              2.阻塞态:一个任务在等待时间或者某一个信号,例如当函数处在Delay过程中时。                        被称为阻塞态。

              3.挂起态:一个任务被你挂起,这个需要在程序中用函数操作,类似与你玩手机时把应用                在后台挂起。将其最小化。称为挂起态。

               4.就绪态:这个任务从阻塞态中结束即Delay函数结束,或者这个函数从挂起态被程序中                  利用函数解挂。就会回到就绪态。

任务的处理方法:

                1.高优先级的任务先执行。只有当高优先级的任务结束后,低优先级的任务才能执行。

                2.时间片轮转,当有多个任务优先级相同时,CPU会以一定的速度执行每一个任务,并                  不会等任务结束后在执行

                3。由于基本上不会用到故不介绍。

以上我们可以得知FreeRTOS执行任务时只会先从就绪态任务中选取优先级高的任务执行,其他状态都不会得到执行,在执行相同高优先级任务时会采用时间片轮转的方式。同时状态的切换可能让其从高优先级的任务退出就绪态,让已经准备好的任务先去执行。任务的状态切换如下图

以上便是我今天学习的理解,有不对的地方请各位大佬及时指出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值