RTOS原理和应用总结

RTOS的作用

RTOS一般应用在中低端处理器当中,这里举一个笔者日常开发遇到的案例来说明RTOS的作用。

假设你有一个设备,这个设备的外围硬件很多,假设有LED、一个网口、若干RS232等等。

在没有RTOS的时候,我们用裸机编程来写,那么通常的做法是写一个while(1)循环,在这个循环中执行232通讯、LED点亮、网口并采集数据。

但是这样子做,有时候并不能符合当前的应用场景,比如:

  1. 网口的通讯与服务器交互,需要优先处理服务器的指令和向服务器发送状态
  2. LED有很多类型,一些是指示灯,一些是呼吸灯,其优先级不高
  3. RS232数量很多,需要不断查询,其优先级并没有网口这么重要,当时又比LED的等级要高,因为232会与外设进行必要通讯

如果采用了while 1的方式,则每个流程的优先级并不能很好体现,且个别LED或者232如果是受控于网口则有控制关系,采用while 1控制外设,也不能体现出外设的控制关系

如此,为了解决优先级以及外设之间通讯的关系,RTOS便由此诞生了。

RTOS的概念:全称为Real-Time Operating System(实时操作系统),是一种专门设计用于处理实时任务的操作系统。与通用计算机上运行的桌面操作系统(如Windows、Linux)不同,RTOS专注于提供对实时性能和响应时间的支持

这里解释一下这个概念:

  1. 外设间的通讯关系一般操作系统都会提供,比如Linux这种操作系统也提供了很多通讯机制
  2. RTOS与其它类型OS的最大不同点就在于:实时性能和响应时间。比如Linux上执行一个程序的时间往往是不固定的,会受到其它外围硬件的影响。而RTOS提供了优先级的概念,让程序的执行时间可以被预测到。这个后面再细谈何为优先级。
  3. RTOS是一个系统类型的简称,跟偏向一种概念,基于RTOS的概念,市面上的常见RTOS有UCOS、FreeRTOS、RT-Thread等等。

RTOS的实现

RTOS的核心实现主要是分为两点:

  1. 多任务多优先级的实现
  2. 通讯机制的实现
    (TIP:有些类型的RTOS还会带有一些组件或者软件包,比如物联网组件、语言类软件包等等,但是这些都不是RTOS所必要的)

多任务多优先级的实现

多任务也就是一个时间内执行多个任务,比如上文的LED和232,其应该一起进行。但是232的优先级又比LED等级高,遇到232大量的突发任务的时候,232应该被优先执行。

以单核实现为例,我们只需要控制LED和232让其交替进行,在宏观的角度上便认为是同时运行的(实际上微观上就是把一个任务一个任务来进行,只不过每个人任务都执行一段时间后,就执行另外的任务)。因此实现任务的切换是关键的。

关于实现任务的切换,我们要从微观的角度去看,即芯片的执行内容由何种因素去决定的。清楚如何控制芯片的执行内容便可以轻易的去切换芯片去执行自己想要的内容了。

大多数芯片的实现,往往是将R0Rx寄存器与必要的寄存器(比如计数器、状态寄存器等)推到堆栈内,然后取出需要执行的任务的寄存器(也是R0Rx寄存器与必要的寄存器),来实现任务的切换。这点如果不理解的话,建议读者可以学习一下汇编语言,汇编会很接近处理器的处理逻辑。

本文给出另外一个文章进行参考:
https://blog.csdn.net/weixin_47702410/article/details/119751040

而优先级的实现,即让程序设定自己的优先级等级,系统进行判断,当前哪个任务的优先级高便执行高优先级的程序,如果优先级一样高,那就轮转调度(也就是两个任务交替执行)。如果使用了优先级的RTOS,需要注意,高优先级一定要可以主动释放自己的执行权的,不然就会处在一直处理高优先级而低优先级将不会被执行。这种主动释放执行权限的操作往往就是加上不阻塞的休眠,在高优先级处在休眠期间,就不会占用CPU了,如此低优先级的任务便可以被执行了。

通讯机制的实现

通讯机制一般指的是若干个任务之间的通讯方式。任务其实相当于大型系统中的进程的概念,每个进程都会认为自己享有了计算机的所有资源,RTOS中的任务也是如此。但是在实际情况下,任务并不是享有所有的资源的,比如某个232口,有多个任务想发送数据,如果同时一起发送就会导致232时序和内容出现问题,应该依次发送。

另外任务之间也是需要通信的,比如上文的网口需要控制LED,同时又需要被动等待232是否收到消息。

综上,通信机制的特点是:

  1. 主要是用于任务之间的通讯
  2. 主要分为两大类,一类为资源控制类,另一类是消息传递类

本文也给出另外一个文章说明资源控制类的信号量机制是如何实现的:
https://blog.csdn.net/weixin_47702410/article/details/119752649

RTOS常见的通讯机制

资源控制类
  • 信号量:用于同步任务或控制对共享资源的访问。信号量可以是二进制的(用作互斥锁)或计数的(用于管理有限数量的资源)
  • 互斥锁:一种特殊类型的信号量,专门用于提供对共享资源的互斥访问。类似二只信号量,但是一般互斥锁带有避免优先级反转的方案
  • 自旋锁:在多核或支持线程的系统中使用,当一个任务尝试获取锁而锁已被占用时,任务会在一个循环中等待(即“自旋”),直到锁变为可用。自旋锁适用于短时间内的锁定,因为它们在等待时不会使任务进入睡眠状态。
消息传递类
  • 邮箱(Mailbox):允许一个任务发送消息给另一个任务的邮箱。邮箱通常是基于中断的,可以存储固定大小的消息。
  • 事件(Event):用于通知一个或多个任务某些条件已经发生。事件可以是单个标志或一组标志,任务可以等待一个或多个事件的发生。
  • 工作队列(Work Queue):允许任务将工作项排队到一个队列中,这些工作项随后由工作线程以FIFO(先进先出)的顺序处理。
  • 消息队列(Message Queue):允许任务发送和接收消息。消息队列可以存储多个消息,并且可以配置为具有优先级,以便优先处理更重要的消息。
  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芯心智库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值