第一章 FreeRTOS简介

从本章开始学习FreeRTOS, FreeRTOS 是一个 RTOS 类的嵌入式实时操作系统。 在学习和使用 FreeRTOS 之前, 需要先了解什么是 FreeRTOS? 为什么选择学习FreeRTOS? 以及FreeRTOS 的特点。

本章分为如下几部分:

1.1 初始 FreeRTOS

1.2 FreeRTOS资料说明

1.1 初识 FreeRTOS

1.1.1 什么是 FreeRTOS?

首先看一下 FreeRTOS 的名字, 可以分为两部分:"Free" 和"RTOS","Free" 就是免费的、自由的、 不受约束的意思, "RTOS" 全称是 Real Time Operating System, 中文名是实时操作系统, 要注意的是,RTOS并不是值某一特定的操作系统, 而是指一类操作系统, 例如,µC/OS,FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类的操作系统。 因此,从FreeRTOS 的名字中就能看出, FreeROTS是一款免费的实时操作系统。

本次学习的FreeRTOS 是众多 RTOS 类操作系统中的一种,FreeRTOS是一款​​免费开源的实时操作系统内核​​,专为资源受限的嵌入式微控制器设计。它的核心价值在于,通过​​多任务管理​​,让一个处理器能够"同时"处理多个任务,并确保关键任务能够在其截止时间前得到执行,从而满足嵌入式应用的实时性需求。

为了快速抓住核心,下表概括了FreeRTOS的主要特征:

核心特征 说明
​​硬实时/软实时​​ 采用​​抢占式调度​​,可满足严格时限(硬实时)或允许偶尔超时(软实时)的应用场景。
​​多任务并发​​ 将复杂应用分解为多个独立​​任务​​,由调度器管理CPU时间,简化程序结构。
​​丰富的同步机制​​ 提供​​队列、信号量、互斥量、事件组​​等,安全高效地实现任务间通信与同步。
​​高度可裁剪​​ 内核轻量(最小可至约6KB ROM),功能模块可配置,适应不同资源约束的硬件平台。
​​多任务调度​​ 支持基于优先级的​​抢占式调度​ ​(高优先级任务立即运行)和​​时间片轮转调度​​(同优先级任务轮流运行)。
​​强大的可移植性​​ 使用C语言编写,已移植支持40多种处理器架构,包括ARM Cortex-M、RISC-V、ESP32等。

图 1.1.1.1 FreeRTOS的主要特征

1.1.2 为什么选择 FreeRTOS?

FreeRTOS 操作系统是一个功能强大的 RTOS 操作系统, 并且能够根据需求进行功能裁剪,以满足各种环境的要求, FreeRTOS 的特点如下图所示:

图 1.1.2.1 FreeRTOS 特点

1.1.3 为什么要学习FreeRTOS?

对于ESP32开发者来说,学习FreeRTOS不是一道选择题,而是一门必修课。这主要是因为ESP32的官方开发框架ESP-IDF构建在FreeRTOS之上。为了让能快速把握全貌,下面这个表格总结了学习FreeRTOS为ESP32开发带来的核心价值。

核心价值 说明
​​开发模式升级​​ 从"裸机"的轮询架构升级为多任务并发的现代编程模型,使程序结构更清晰。
​​硬件潜力释放​​ 充分利用ESP32的双核处理器资源,实现真正的并行处理,提升系统效率和响应能力。
​​项目基石​​ ESP-IDF及其所有组件和示例都基于FreeRTOS,要使用官方资源就必须掌握它。
​​资源管理专业化​​ 提供队列、信号量、互斥锁等机制,能优雅地解决多任务环境下的资源共享和同步问题。

表1.1.3.1 学习FreeRTOS为ESP32开发带来的核心价值说明

1.1.3.1 告别"裸机"限制

在传统的"裸机"编程中,所有功能通常都塞在一个大的 while(1)循环里。这会导致一个严重问题:如果某个任务(比如读取传感器)需要等待,整个系统都会被阻塞,其他任务(如更新显示屏)也无法执行。

FreeRTOS通过​​多任务并发​​解决这个问题。可以为每个独立的功能(如网络连接、传感器采集、用户界面更新)创建一个独立的​​任务​​。每个任务都有自己的运行上下文,操作系统内核(调度器)负责在多个任务之间快速切换,让它们看起来像是在同时运行。这带来了几个显著好处:

  • **模块化与团队协作​​:**每个功能模块可以独立开发和测试,代码更易维护和复用;
  • **​​实时性保证​​:**可以为不同任务设置优先级。例如,处理紧急指令的任务可以设为高优先级,确保它能立即抢占低优先级任务(如日志记录)的CPU时间,从而满足实时性要求。
1.1.3.2 发挥双核威力

ESP32是一款功能强大的​​双核​​处理器。FreeRTOS的SMP(对称多处理)支持允许将任务精确地分配到指定的CPU核心上运行。

通过使用 xTaskCreatePinnedToCore()这个API,可以实现精细的任务分配。例如,将需要快速响应的Wi-Fi/蓝牙任务绑定到核心0,将复杂的后台数据处理任务绑定到核心1。这样就能真正发挥ESP32的硬件潜力,大幅提升整体处理能力,避免单个核心忙死而另一个核心闲置的情况。

1.1.3.3 使用官方生态的前提

乐鑫为ESP32提供的​​ESP-IDF​​开发框架,其内核就是FreeRTOS。这意味着:

  • **官方示例基于FreeRTOS​​:**几乎所有ESP-IDF的示例代码都是通过创建FreeRTOS任务来组织的;
  • **​​系统组件依赖FreeRTOS​​:**Wi-Fi、蓝牙、文件系统等高级功能,其底层驱动和事件处理都依赖于FreeRTOS的任务调度和通信机制。

因此,不学习FreeRTOS,就很难深入理解和灵活运用ESP-IDF提供的强大功能。

1.1.3.4 优雅处理多任务协作

当多个任务需要访问同一资源(如全局变量、串口)时,如果没有保护机制,会导致数据混乱。FreeRTOS提供了一整套成熟的​​同步与互斥​​机制来优雅地解决这些问题:

  • **队列​​:**任务间安全传递数据的管道,实现解耦;
  • **​​信号量和互斥锁​​:**互斥锁带有优先级继承机制,能有效防止优先级反转问题,安全地保护共享资源;
  • **​​事件组​​:**允许任务等待多个事件中的一件或多件发生后才继续执行。
1.1.3.5 如何开始学习
  • **搭建环境​​:**按照ESP-IDF官方文档安装开发环境;
  • **理解核心概念​​:**重点理解任务、状态(运行、就绪、阻塞、挂起)、优先级调度和上述的通信机制;
  • **从示例入手​​:**从最简单的"hello_world"任务创建示例开始,编译、烧录、观察串口日志,体会任务的创建、延时和删除;
  • **逐步实践​​:**尝试创建多个不同优先级的任务,观察调度行为;然后使用队列在任务间传递数据;最后在共享资源访问中引入互斥锁。

1.2 FreeRTOS资料说明

获取FreeRTOS最权威、最实时的资料,FreeRTOS官网是最好的地方,FreeRTOS的官网网址是https://www.freertos.org/,打开后如下图所示:

图 1.2.1.1 FreeRTOS 官网

FreeRTOS 的官网是全英文的,打开后分别是"Download FreeRTOS" 和"FreeRTOS Documentation", 通过"Download FreeRTOS" 就能够下载到最新发布的 FreeRTOS, 而右侧的"FreeRTOS Documentation" 就是在 FreeRTOS 官网查看在线资料的入口,点击进入"FreeRTOS Documentation" 可以看到FreeRTOS相关介绍。

图 1.2.1.2 FreeRTOS 官网查看在线资料网页

FreeRTOS 官方对相关相关API有详细说明,并且提供了两份 PDF 文档和一份文档配套的源代码, 其中一份PDF是FreeRTOS的教程指南, 另一份PDF是FreeRTOS的参考手。后续会参开着两份手册进行编程, 如下图所示:

图 1.2.1.3 FreeRTOS 编程参考书籍

相关推荐
沐欣工作室_lvyiyi5 小时前
基于单片机的智能灯光控制系统设计与实现(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·灯光控制
Blossom.1186 小时前
把AI“刻”进玻璃:基于飞秒激光量子缺陷的随机数生成器与边缘安全实战
人工智能·python·单片机·深度学习·神经网络·安全·机器学习
应用市场6 小时前
STM32电池管理系统(BMS):电量统计原理与实现
stm32·单片机·嵌入式硬件
cici158747 小时前
基于STM32G4系列MCU的3kW数字LLC电源控制
stm32·单片机·嵌入式硬件
平凡灵感码头7 小时前
基于STM32的智能门锁系统 经典开局,先来个点灯
stm32·单片机·嵌入式硬件
可爱的鸡仔7 小时前
STM32------存储器映像
stm32·单片机·嵌入式硬件
清风6666667 小时前
基于单片机的自动换挡式高精度数字电压表设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
HXQ_晴天8 小时前
STM32中MX_TIM2_Init函数和HAL_TIM_Base_MspInit函数区别
stm32·单片机·嵌入式硬件
HXQ_晴天8 小时前
STM32实现呼吸灯效果原理
stm32·单片机·嵌入式硬件