什么是实时操作系统 (RTOS)?

文摘   2024-11-02 09:39   四川  
近期群福利: 《电机驱动器电路板布局的最佳实践》
                            《高速接口电路布局指南》
与GPT4o技术对话,与业内同行交流,欢迎关注AI机器人,入群👆👆👆
************************************
实时操作系统 (RTOS) 是一种运行多线程应用程序并可以满足实时期限的操作系统 (OS) (通常是轻量级OS)。大多数rtos包括调度程序、资源管理和设备驱动程序。请注意,当我们谈论 “截止日期” 时,我们并不一定意味着 “快速”。相反,满足最后期限表明了确定性的水平,这意味着我们可以弄清楚某些任务何时会在运行时之前执行。
在本文中,我们将介绍各种RTOS概念,并使用ESP32和Arduino IDE进行演示。这些信息将在一系列视频中介绍。大多数视频将以挑战结束,我们鼓励您尝试。针对这些挑战的解决方案将在这些Maker.IO页面上提供。
通用操作系统vs.实时操作系统
通常,当我们想到 “操作系统” 时,我们会想到Windows,macOS和Linux之类的东西。这些是通用操作系统 (gpo) 的示例。大多数情况下,这些操作系统是为用户交互而设计的,并提供某种界面,无论是命令行界面 (CLI) 还是图形用户界面 (GUI)。它们还设计用于运行多个应用程序,通常具有多线程,并提供其他好处,如资源/文件管理和设备驱动程序。
因为用户交互通常是GPOS设计的主要焦点,所以一些延迟是可以接受的 (只要用户没有注意到很长的滞后时间)。因此,在GPOS中很难 (如果不是不可能的话) 预测确切的任务期限。
这与RTOS形成对比。大多数rtos被设计为在微控制器上运行。因此,他们通常可以放弃复杂的用户界面 (例如,没有命令行或GUI),以便一次完成一些任务而无需处理用户输入。此外,为微控制器编写的应用程序可能需要满足严格的时间期限,例如每隔几毫秒点燃火花塞,控制医疗设备以保持某人的生命,并在精确的时间在卫星上发射推进器以保持在轨道上。
许多rtos还带有资源管理库,例如读取和写入文件的能力,以及低级设备驱动程序,例如WiFi和蓝牙堆栈和LCD驱动程序。请注意,RTOS中的设备驱动程序通常比GPOS中的设备驱动程序简单得多,因为通常不要求微控制器执行控制图形卡之类的操作!
超级循环vs.多线程应用
如果你以前写过一个嵌入式应用程序 (包括Arduino的东西),你可能熟悉超级循环架构 (也称为 “裸机编程”)。在这里,没有操作系统,结构相当简单: 在您的main() 函数中,您设置了任何变量,驱动程序,库,等,然后在while(true) 循环中执行一个或多个周期性任务。在Arduino中,这体现在setup() 和loop() 函数 (它们只是从Arduino库中的main() 调用的函数)。
超级循环应用程序没有任何问题。事实上,它仍然是最流行的微控制器编程方法之一,因为它易于实现和调试。您甚至可以通过使用中断服务例程 (isr) 添加中断导致程序在发生外部事件 (例如计时器到期或按下按钮) 时停止并执行一些任意代码。
如果在主循环期间要完成多个任务,则通常以循环方式执行它们。当你开始添加这么多的任务,一些开始错过最后期限或阻止其他功能工作时,问题就出现了。这就是RTOS可以提供帮助的地方。您基本上可以同时执行所有内容,而不是以循环方式执行所有内容。
你仍然可以有中断-他们会停止任何任务正在运行的时刻执行ISR,然后返回执行任务。
请注意,这里有一些术语可能会混淆:
  • A任务是一组装入内存的指令。它也可能意味着需要完成的工作或目标的某个单位。
  • A螺纹是中央处理器 (CPU) 利用率的单位,具有自己的程序计数器和堆栈内存。
  • A流程是计算机程序的一个实例。一个进程可以有多个线程。大多数嵌入式程序都是作为单个进程编写的,但是GPOS通常同时运行多个进程。

在FreeRTOS中,这些术语可能会变得更加模糊。FreeRTOS使用术语 “任务” 来表示 “线程”。因此,您经常会看到这些术语可互换使用,尤其是在FreeRTOS文档中。在这一系列视频和帖子中,我将坚持FreeRTOS的做法,将CPU利用率单位称为 “任务”,但要知道它们类似于其他框架中的 “线程” (e.g. POSIX)。
所以,我们得到了最终的问题: 你应该使用RTOS?答案是 “是”,如果你需要在你的微控制器上运行多个任务/线程来完成你的目标。根据您的需求,满足实时截止日期的能力可能很重要,也可能不重要。如果你不需要多线程,最好坚持超级循环架构,因为它更容易调试。
如果您需要多线程支持,RTOS还有其他一些好处。也就是说,它允许您更容易地模块化代码,因为任务可以单独编写。如果您在团队中工作,则可以将各个任务分配给不同的团队成员,以允许并发开发。请注意,最后仍然会有调试,以确保一切都正确集成。
RTOS要求
RTOS确实需要一些开销,因为后台任务 (调度程序) 需要定期运行以切换任务。这会占用内存和一些CPU周期。结果,许多rtos具有最小时钟速度和存储器要求。
虽然您可以在Arduino UNO (ATmega 328p) 上运行许多不同的rtos,调度程序的开销是如此之大,以至于您没有为自己的应用程序留下很多资源。因此,许多8位和16位微控制器最好与更简单的超级回路 (裸机) 架构一起使用。
当你开始使用功能更强大的32位微控制器,时钟更快 (例如。g.超过20 MHz) 和更多内存 (例如g.超过32 kB RAM),您将有更多的资源可用于运行rtos。请注意,这些不是硬性要求-不同的rtos需要不同数量的资源。
在本系列中,我们将使用ESP32,它具有240 MHz时钟,512 kB RAM和2内核。因为它被设计为物联网 (IoT) 系统,所以ESP32受益于RTOS。事实上,Arduino版本的ESP32支持FreeRTOS开箱即用 (确切地说是修改版本)。仅WiFi和蓝牙堆栈就需要RTOS,因为它们必须与用户应用程序同时运行,以便它们可以在必要的时间内响应网络请求。
根据Eclipse基金会2018年的一项调查,Linux仍然是物联网设备最受欢迎的操作系统。但是,请注意,Linux是一个完整的GPOS,即使它以轻量级的方式使用。此外,它通常需要一个完整的微处理器 (不是微控制器) 来运行。 
在Windows (另一个gpo) 之后,我们看到FreeRTOS是最受欢迎的RTOS。紧随其后的是裸机编程 (超级循环)。其余的似乎无法与这4个的受欢迎程度相比。话虽如此,我建议密切关注Zephyr项目,因为它是RTOS领域的新手,并且得到了Linux基金会的支持。
如果您正在创建复杂的嵌入式程序,RTOS可以是一个强大的工具。它们可以帮助您分离任务,并使您能够同时运行它们 (或看起来同时运行)。您可以在大多数rtos中设置任务的优先级别,这允许某些任务在其他任务之前中断和运行。这被称为 “抢先”。
如果您需要并发性或正在深入了解物联网或机器学习等嵌入式概念,我建议您将rtos和多线程编程添加到您的工具包中!
  《电机驱动器电路板布局的最佳实践》完整PDF文档已分享,欢迎入群获取

电子设计实战派
以国际及国内一线硬科技原厂资源,聚焦最硬核的硬科技进阶资讯,解决硬科技落地技术难题,赢在“电子设计实战派”。
 最新文章