STM32 单片机开发 - FreeRTOS 实时操作系统
一、在线下载 FreeRTOS 内核


二、FreeRTOS 实时操作系统介绍
FreeRTOS 实时操作系统是一种轻量型实时操作系统,实现快速响应
FreeRTOS 实时操作系统是 RTOS 实时操作系统下的一个版本(子集)
RTOS 实时操作系统具有很多版本:FreeRTOS、RT-Thread、Thread-X……
2.1 裸机开发和系统开发的区别
裸机开发:不使用操作系统,所有驱动代码按照 main.c 中的编写顺序按顺序执行代码。
系统开发:使用操作系统,所有驱动代码支持多进程 / 多线程的并发处理机制,可以实现快速响应。
FreeRTOS 实时操作系统 = 裸机开发 + 多线程(多任务)并发处理
2.2 多进程和多线程的区别
- 资源量:进程是资源分配的最小单位,线程是任务调度的最小单位,1 个线程 = 1 个任务;
- 安全性:进程的用户空间相互独立(IPC 机制),线程同享同一进程下的资源(同步互斥);
- 效率:多线程的并发处理的效率更高(进程的上下文切换)。
三、FreeRTOS 实时操作系统的特点
- 小巧与灵活性:FreeRTOS 非常小巧,适合在资源有限的微控制器中运行,但其应用并不仅限于微控制器。开发者可以根据实际应用需求进行定制和配置,选择所需的功能模块。
- 可移植性:FreeRTOS 支持多种处理器架构,并能在不同的硬件平台上运行,这为开发者提供了更大的硬件选择灵活性。
- 实时性:FreeRTOS 提供严格的任务调度机制,确保任务按照预定的优先级和时间约束执行,使其非常适合对时间要求较高的应用场景,如工业控制和汽车电子等领域。
- 丰富的功能:包括任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等。
- 开源与免费:FreeRTOS 是一个开源项目,其源代码可以免费获取和使用,这有助于促进其在开发者社区中的普及和发展。
- FreeRTOS 的应用领域非常广泛,包括但不限于工业控制、汽车电子、智能家居、医疗设备、航空航天等需要实时响应和稳定运行的领域。
四、FreeRTOS 实时操作系统的任务调度机制
linux 操作系统的任务调度机制:默认使用时间片轮询机制,也可以使用抢占式任务调度机制;
FreeRTOS 操作系统的任务调度机制:默认使用抢占式任务调度机制,也可以使用时间片轮询机制。
抢占式任务调度机制:给每个任务/线程分配对应的优先级等级,优先级高的先执行,优先级低的后执行。
注意:
优先级等级的数字越小,优先级越高
优先级相同时,使用时间片轮询机制
五、任务的状态
- 就绪态:任务的资源分配成功,等待被运行。
- 运行态:被分配资源的任务使用系统的时间片,成功开始运行。
- 阻塞态:任务中存在耗时、延时(Delay 函数、超时检测等)时,任务处于阻塞状态;处于阻塞状态的任务,可以被别的任务抢占系统的资源,从而运行。
- 挂起态:在任务 1 中使用挂起函数挂起任务 2 ,使任务 2 处于挂起状态,系统不会调用任务 2;需要在别的任务/任务 1 中使用解除挂起函数,解除任务 2 的挂起,使任务 2 处于就绪态。

六、CubeMX 中配置 FreeRTOS





将如图所示的 CMSIS RTOS2 选项勾上,在下面进行任务的配置。
![]()
图 9 创建任务的相关参数 一个任务的参数有:任务名、当前优先级、任务大小、任务的入口函数等。![]()
图 10 新任务创建参数

如果出现如图 11 所示的 RTOS 相关警告,解决方法如下图:
![]()
图 12 警告解决方法