FreeRTOS(1)
一、基本概述
RTOS(Real Time OS)即实时操作系统,根据各个任务的要求,进行资源管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个任务均有一个优先级(类似中断抢占优先级),RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。
RTOS总是运行优先级最高且就绪的任务。
实时多任务操作系统,以分时方式运行多个任务,任务之间的切换以优先级为根据。只有优先服务方式的RTOS才是真正的实时操作系统。
使用实时操作系统还需要额外的ROM/RAM开销,2~5%的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/OS,FreeRTOS,RTX,RT-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位平台建议使用任务task |
|
event_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.h: |
FreeRTOS内核配置,Tick时钟和irq中断配置 |
四、总结
FreeRTOS凭借极简内核、实时性保障及开源生态,已成为嵌入式设备的“隐形引擎”。未来其将在AIoT、工业4.0驱动下,通过多核支持、安全认证与开发者工具升级,持续巩固在实时系统领域的领导地位。对于开发者而言,掌握FreeRTOS是进入嵌入式高可靠性应用的必备技能
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)