实时操作系统 (RTOS) 是管理微处理器或微控制器时间的软件。实时系统指如果系统的逻辑和时序正确性无法满足,可能会导致严重后果的系统。实时多任务应用是一个必须同时处理多个时间关键活动的系统。实时多任务内核(也称为实时操作系统)是确保尽可能高效地处理时间关键事件的软件。RTOS的使用,通过将应用程序划分为多个独立的任务,简化了系统设计过程。
1. 前/后台系统
不使用RTOS的系统通常设计如图1所示,这类系统称为前/后台系统。应用程序由一个无限循环组成,该循环调用不同的应用模块来执行所需的操作。模块按顺序执行(后台),由中断服务程序 (ISR) 处理异步事件(前台)。关键操作必须由ISR执行,以确保及时处理。由ISR提供的数据信息在相应的后台模块执行之前不会被处理,其延迟时间取决于后台循环执行所需的时间。
2. 实时内核
1、多任务处理
多任务处理是在多个任务之间调度和切换 CPU 的过程,单个CPU在多个顺序任务之间切换使用。多任务处理提供了将应用程序分解为一组共享处理器的小型专用任务的能力。实时内核使应用程序更易于设计和维护。任务是一个简单的程序,认为自己拥有整个CPU。实时应用程序的设计过程涉及将要完成的工作拆分为负责部分问题的任务。
2、内核
内核负责任务管理和任务之间的通信。当内核决定运行另一个任务时,它将当前任务的上下文(CPU 寄存器)保存到当前任务的独立堆栈区域。新任务的上下文将从其堆栈区域恢复,恢复新任务的代码执行。这个过程称为上下文切换或任务切换。每个任务的堆顶地址等信息被存储在任务控制块 (TCB)数据结构中。TCB在创建任务时分配,并由 RTOS管理。
3、 中断
实时系统中的一个重要问题是从中断响应到实际开始执行用户中断处理代码需要时间。在处理临界代码时,RTOS都会禁用中断。禁用中断的时间越长,中断延迟就越大。RTOS 通常在短于50 uS的时间内禁用中断,越短越好。
4、调度
调度是内核的主要职责,负责确认运行哪个任务以及何时运行。大多数实时内核采用优先级策略,每个任务根据其重要性分配一个优先级。任务的优先级由应用指定。在基于优先级调度的内核中,CPU 的控制权将始终交给就绪的最高优先级任务。然而,最高优先级任务何时获得 CPU 取决于所使用的调度类型。有两种类型调度:非抢占式调度和抢占式调度。
非抢占式调度
非抢占式调度要求每个任务主动放弃对CPU的控制。为了保持任务并发,这个过程必须经常进行。非抢占式调度也称为协作式多任务处理。当一个任务放弃 CPU 时,内核会执行下一个就绪的最重要的任务代码。异步事件由ISR处理。ISR可以使更高优先级任务就绪,但ISR完成后将返回到被中断的任务。只有当前任务自愿放弃 CPU 时,新的更高优先级任务才会获得CPU的控制权。如图2所示。非抢占式调度的延迟远低于前后台系统;延迟由最长任务的时间确定。
抢占式调度
在抢占式内核中,当一个事件使高优先级的任务就绪时,当前任务立即挂起,较高优先级的任务获得CPU控制权。如果ISR使更高优先级的任务就绪,则被中断的任务挂起,恢复执行新的更高优先级的任务。大多数实时系统采用抢占式调度,其响应速度更快。抢占式调度如图3所示。
5、重入
可重入函数是可以由多个任务使用而不必担心数据损坏的函数。相反,不可重入函数不能被多个任务共享,但可以通过使用信号量或在临界段中代码中禁用中断来互斥使用不可重入函数。可重入函数可以被随时中断并恢复,不会丢失数据。可重入函数使用局部变量(CPU 寄存器或堆栈变量),如果使用全局变量需保护其数据。专门为嵌入式软件设计的编译器通常会提供可重入的运行时库。非抢占式调度不需要可重入函数,除非函数在任务和ISR之间共享。如果函数由多个任务共享,则抢占式调度需要函数可重入。
6、内核服务
实时内核为应用程序提供各种服务。内核提供的最常见的服务之一是信号量管理。信号量是一种协议机制,用于控制对共享资源的访问(互斥)、发布事件的发生或允许两个任务同步它们的活动。信号量通常是代码能否继续执行的开关。如果信号量已在使用中,则请求任务将被挂起,直到信号量被其当前所有者释放。挂起的任务通常不消耗CPU时间。
内核还提供与时间相关的服务,允许任务自身延迟整数个系统时钟。时钟节拍通常每10到200 毫秒发生一次,具体取决于应用要求。
任务或 ISR 将信息传递给另一个任务,这称为任务间通信,用于发送和接收消息的服务通常由内核提供。用于发送消息的两个最常见的内核服务是消息邮箱和消息队列。消息邮箱也称为消息交换,通常是一个指针变量。通过内核提供的服务,任务或ISR 将消息(指针)发送到邮箱。发送任务和接收任务约定指针指向的消息内容。消息队列用于向一个任务发送多个消息。消息队列本质上是一个邮箱数组。
3.商业RTOS
目前大约有100家RTOS供应商。产品可用于8、16 和32位微处理器。其中一些是完整的操作系统,包括实时内核、输入/输出管理器、窗口系统、文件系统、网络协议栈、语言接口库、调试器和跨平台编译器等。RTOS的成本从100美元到超过10,000美元不等。如此多的供应商,困难在于选择合适的RTOS。
4.小型嵌入式系统
许多小型嵌入式系统,如引擎控制、智能仪器、机器人、计算机外围设备和电信设备都可以从使用RTOS中受益。此类系统通常基于8位微处理器设计。对于64 KB地址空间,大多数8位微处理器无法承受需要大量存储器的RTOS。商业内核只需要大约1到3 KB 的ROM。一些内核甚至允许用户在逐个任务的基础上指定堆栈大小。此功能有助于减少应用所需的RAM的空间。对 RTOS 的一个常见误解是它大量增加了CPU开销。事实上,一个 RTOS只需要1% 到4%的CPU 时间来换取有价值的服务。小型RTOS的特性包括:
· 低成本
· 具有最小的中断延迟
· 内核服务的执行时间确定
· 能够管理至少20个任务
· 允许动态创建和删除任务
· 提供信号量管理服务
· 基于内核服务提供时间延迟和超时
5.总结
RTOS 允许轻松设计和扩展实时应用程序,无需对软件进行重大更改即可添加新的功能。大量应用程序可以从使用RTOS中受益。RTOS 可以确保时间关键事件被快速有效地处理。一旦你将RTOS 用于应用程序,你将离不开它!
实时操作系统大部分是运行在芯片的底层,比如美国的Vx Works,RT-linux,我们国产的SylixOS,这些大型的实时操作系统实时的控制着最底层的应用,时间确定的执行着设定任务,例如火箭发射中定是分离,调整轨道等。
硬实时与软实时之间最关键的差别在于,软实时只能提供统计意义上的实时。例如,有的应用要求系统在95%的情况下都会确保在规定的时间内完成某个动作,而不一定要求100%。
硬实时系统有一个刚性的、不可改变的时间限制,它不允许任何超出时限的错误。超时错误会带来损害甚至导致系统失败、或者导致系统不能实现它的预期目标。
软实时系统的时限是一个柔性灵活的,它可以容忍偶然的超时错误。
实时操作系统就是在规定的时间内必须正确地完成操作,完成操作的时间有操作系统的因素,也有用户软件的因素。
用了RTOS之后就回不去裸机了,除非硬件资源不足,要不基本都跑RTOS。
仔细的学习了好几遍,还要继续学习才能领悟。
引用: wangerxian 发表于 2022-9-7 16:45 用了RTOS之后就回不去裸机了,除非硬件资源不足,要不基本都跑RTOS。
是的,同感!
谢谢分享!
刷一遍楼主的帖子,对FreeRTOS官网入门手册里的术语终于对上号了,399页E文啃得那叫酸爽
引用: 秦天qintian0303 发表于 2022-9-8 16:32 RTOS优先级能分多少?
FreeRTOS的似乎可以无数个(unsigned long / UBaseType_t)
RTOS用起来还是很方便的,在资源足够的情况下。楼主整理的很到位,学习了!
谢谢分享,图文并茂。
看完了楼主的帖子介绍,FreeRTOS官网入门手册太难啃了。