FreeRTOS(1)

张开发
2026/5/17 9:29:04 15 分钟阅读
FreeRTOS(1)
一、基本概述RTOSReal Time OS即实时操作系统根据各个任务的要求进行资源管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中每个任务均有一个优先级类似中断抢占优先级RTOS根据各个任务的优先级动态地切换各个任务保证对实时性的要求。RTOS总是运行优先级最高且就绪的任务。实时多任务操作系统以分时方式运行多个任务任务之间的切换以优先级为根据。只有优先服务方式的RTOS才是真正的实时操作系统。使用实时操作系统还需要额外的ROM/RAM开销25%的CPU额外负荷以及内核的费用。使用实时操作系统的必要性嵌入式实时操作系统提高了系统的可靠性提高了开发效率缩短了开发周期。例如官方甚至提高网络协议栈、文件系统、图形界面ucGUI、emWin、QT、LVGL....的支持。嵌入式实时操作系统充分发挥了32位CPU的多任务潜力提高吞吐量就是一个负载均衡二、用RTOS做嵌入式开发的优势2.1 软件工程角度分析1.并发性程序并发工作效率低在写裸机软件时不可避免的在主程序中会有一个超级大的 while(1) 循环这里面几乎包含整个项目的所有业务逻辑。因为每个业务逻辑里面都会有 delay 这样的循环等待函数这样导致了所有的业务逻辑几乎都是串行起来工作的。这个时候 CPU 就会有很多时间都浪费在了延时函数里一直在空转导致软件的并发效率非常差。2.模块化高内聚、低耦合的原则从软件工程的角度我们在做软件开发时都会强调高内聚功能集中、低耦合低干扰的原则。而裸机的模块化开发难度非常大模块间的耦合较重这也导致了无法在大型项目使用裸机来开发。还是刚才 main 函数中大 while(1) 的例子可以想象到那么多功能都紧紧的挤在一个函数里不可拆分模块化开发的困难重重。举一个非常贴切的例子在一些使用看门狗的项目中如果使用 delay 延时函数那得注意点万一延时过长主函数来不及喂狗看门狗就被触发了。最后会产生这样一种感觉一个简简单单的 delay 还得考虑喂狗功能裸机开发时操的心太多了自然无法应用在大型项目中。3.生态很多高级软件组件必须依赖于操作系统来实现一些软件无法运行在裸机上比如乐鑫ESP32、Realtek、 TI(德州仪器) 和 联发科 提供的 WiFi SOC SDK 一些蓝牙 SOC 的 SDK 也都是只支持操作系统所以如果你不了解、不会使用操作系统这些芯片也就玩不转了。4.实时性功能复杂的情况下实时性无法保证软件的实时性在一些领域会有一定的要求软件的每个步骤必须在指定的时间被触发。工控领域就是最常见到的场景如果实时性无法保证机械设备可能就无法按照指定时序要求去动作以至于发生机械事故甚至会威胁到人的生命。回过来接着看裸机软件如果软件变得庞大以后可以想象到主程序中那么大的一个 while(1) 循环代码耦合严重到处都是 delay 延时要保证实时性几乎是不可能的。5.可重用性软件可重用性差总是重复造轮子可重用性与模块化程度有直接的关系。相信大家每个人在工作中都不想做很多重复性的工作同样在写代码时也想着尽可能少写一些功能相似的代码。但在这个嵌入式碎片化极其严重的时代各式各样的芯片想要让同样的代码在裸机环境下同时适配不同的硬件难度非常大。这样也就导致了裸机的代码会过多的依赖于底层硬件重复造轮子的过程也就不可避免。2.2 操作系统带来的优势线程方式的并发任务处理解决模块化问题同时保证实时性。1. 模块化使用了操作系统以后整个软件的工作被拆分成了由多个任务来构成也会被称为线程每个线程有自己独立的运行空间即线程堆栈这个时候每个线程你玩你的我做我的咱们大家互不干涉模块化程度得到很好的提高。2. 并发性从并发的角度来看各个线程在使用 delay/事件等待这类函数时会自动的让出 CPU 给其他有需要的线程不仅书写 delay 延时函数操的心少了并发的好处就是能够在更细的粒度来尽可能的提高CPU的利用率。3. 实时性再来看实时性像 ucos/RT-Thread 这些 RTOS 本身就被设计为实时的操作系统各个线程都有不同的优先级别重要的线程可以设为高优先级不重要的线程可以降低优先级做好全局的统筹规划后这样整个软件的实时性也能得到保证。4. 开发效率由于操作系统提供了统一的抽象接口层方便了可重用组件的积累提高开发效率。操作系统其实是一群软件大牛们智慧的结晶他们站在应用软件、底层驱动的开发角度对很多常见的软件功能进行了封装、抽象比如信号量、事件通知、邮箱、环形缓冲区、单向链表/双向链表等等这些功能拿来即用对于开发者方便极了还有一些操作系统比如Linux 和我们国产的 RT-Thread 他们这些系统对碎片化的硬件统一封装了一套标准的硬件操作接口一般称为设备驱动框架。这样我们的应用软件工程师就可以专攻应用的工作再也不用怕更换硬件又需要重复造轮子了。5. 软件生态生态的丰富带来了量变到质变的过程自己玩-大家一起玩。使用操作系统所带来的软件可模块化、重用性的提升也使得我们自己在做软件开发时可以封装一套基于操作系统、适合嵌入式的可重用组件这些组件不仅可以用在自己的项目中还能开源出来分享给更多有需要的嵌入式开发者把软件的价值最大化。三、FreeRTOS操作系统3.1FreeRTOS操作系统概述市面上总共有三大操作系统分别是UCOS、RT-Thread、FreeRTOS今天我们重点介绍FreeRTOS操作系统FreeRTOS是由Real Time Engineers Ltd 出品是一款市场领先的RTOS。现在已经支持几十种处理器架构。Free即免费的RTOS全称是 Real Time Operating System中文就是实时操作系统。RTOS不是指某一个确定的系统而是指一类系统。比如μC/OSFreeRTOSRTXRT-Thread等这些都是RTOS类操作系统。操作系统允许多个任务同时运行这个叫做多任务。实际上一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务。任务调度在各个任务之间的切换非常快就给人们造成了同一时刻有多个任务同时运行的错觉。某些操作系统给每个任务分配同样的运行时间时间到了就轮到下一个任务比如Unix操作系统。FreeRTOS 操作系统则是由用户给每个任务分配一个任务优先级任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。FreeRTOS是RTOS系统的一种FreeRTOS十分的小巧可以在资源有限的微控制器中运行当然FreeRTOS 不仅局限于在微控制器中使用。但从文件数量上来看 FreeRTOS 要比μC/OS-II和μC/OS-III小的多。FreeRTOS 最大的优势就是开源免费商业使用的话不需要用户公开源代码也不存在任何版权问题是当前小型嵌入式操作系统市场使用率最高的。3.2FreeRTOS的特点FreeRTOS是一个可裁剪的小型 RTOS 系统其特点包括FreeRTOS 的内核支持抢占式合作式和时间片调度。提供了一个用于低功耗的 Tickless 模式。系统的组件在创建时可以选择动态或者静态的 RAM比如任务、消息队列、信号量、软件定时器等等。FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元如 STM32F429。FreeRTOS 系统简单、小巧、易用通常情况下内核占用 4k ~ 9k 字节的空间。高可移植性代码主要 C 语言编写。高效的软件定时器。强大的跟踪执行功能。堆栈溢出检测功能。任务数量不限。任务优先级不限。3.3FreeRTOS的代码说明croutine.c/croutine.h:协程在8位/16位平台下效率比较高在32位平台建议使用任务taskevent_groups.c/event_groups.h:顾名思义这个是事件组的实现。heap_x.c内核堆实现FreeRTOS提供了heap_1.c heap_5.c 5种堆管理器各有优缺点需要根据应用进行选择list.c/list.h链表实现主要为调度器提供数据结构算法支持服务。比如任务链表port.c/portmacro.h硬件相关层级可移植抽象主要包括SysTick中断上下文切换中断管理queue.c/queue.h/semphr.h信号量、互斥体实现tasks.c/task.h:任务管理器实现timers.c/timers.h软件定时器实现FreeRTOS.h选编译配置文件用于汇总所有源文件的编译选择控制FreeRTOSConfig.hFreeRTOS内核配置Tick时钟和irq中断配置四、总结FreeRTOS凭借极简内核、实时性保障及开源生态已成为嵌入式设备的“隐形引擎”。未来其将在AIoT、工业4.0驱动下通过多核支持、安全认证与开发者工具升级持续巩固在实时系统领域的领导地位。对于开发者而言掌握FreeRTOS是进入嵌入式高可靠性应用的必备技能

更多文章