FreeRTOS 学习笔记
FreeRTOS 学习笔记(韦东山老师课程)
第一天 :RTOS 基础与 FreeRTOS 入门
1、什么是 FreeRTOS
1.FreeRTOS 是一款开源的实时操作系统(RTOS),其核心目标是实现多任务的并发运行。它具有轻量级、可裁剪的特点,适用于资源受限的嵌入式设备(如单片机),能够高效管理多个任务的调度与执行。
2.为什么使用 RTOS?—— 从裸机模式到多任务系统的演进
1. 裸机程序设计模式
1.0轮询模式
程序通过一个while(1)循环依次执行所有任务,任务按顺序轮流执行,无法优先处理紧急任务。

缺点:若某个任务执行时间长,会导致其他任务响应延迟。
1.1前后台
由 “后台”(while(1)循环中的主程序)和 “前台”(中断服务程序)组成,紧急任务通过中断触发,优先于后台执行。

优点:紧急任务可通过中断快速响应;
缺点:中断处理逻辑复杂时,可能阻塞后台程序,且多个中断之间容易冲突。
1.2定时器驱动
属于前后台模式的扩展,通过定时器按固定频率触发中断,在中断中按时间周期调用不同任务,实现多任务的定时执行。

优点:可按不同周期调度任务;
缺点:任务依赖定时器中断,时间精度有限,且任务执行时间过长会影响定时器周期。
1.3 基于状态机
将复杂任务拆分为多个状态,每次仅执行一个状态的代码,减少单个任务的执行时间,降低对其他任务的阻塞。


喂一口饭” 拆分为 “舀饭→喂饭→舀菜→喂菜”4 个状态,每次执行 1 个状态;
“回一个信息” 拆分为 “查看信息→打字→发送”3 个状态,每次执行 1 个状态。
优点:缩短单次任务执行时间,提高系统响应速度;
缺点:状态拆分和管理复杂,不适合多任务优先级差异大的场景。
2.多任务系统(RTOS 的核心)
RTOS 通过任务调度器实现多任务的 “并发”(宏观上同时运行,微观上按优先级切换),解决了裸机模式的局限性。
2.1 多任务模式:每个任务独立运行,由 RTOS 调度器按优先级分配 CPU 时间;
2.2 互斥操作:解决多个任务对共享资源(如硬件外设)的冲突访问;
2.3 同步操作:实现任务间的协作(如一个任务完成后触发另一个任务)。
3.创建FreeRTOS工程
1. 工程配置步骤
选择芯片型号及 FreeRTOS 版本(如基于 CMSIS V2 接口);
配置核心参数(如任务栈大小、优先级范围、定时器频率等);
添加任务:通过工程配置界面设置任务名称、优先级、栈大小及入口函数。

配置参数

添加任务

优先级:osPriorityNormal 表示正常优先级,数值越高,任务越优先执行;
栈大小:需根据任务实际内存需求设置,避免栈溢出;
分配方式:动态分配由 RTOS 管理内存,静态分配需手动指定内存块。
第二天:FreeRTOS 任务创建与内存管理
1.创建一个多任务程序
1. 任务函数定义
任务函数需遵循 RTOS 的标准格式,即void 任务名
(void *argument),通过while(1)循环使任务持续运行。

void *argument:用于传递任务创建时的参数(此处为 NULL,无参数);
while(1):确保任务不会退出,持续响应调度器的调用。
- 任务创建 API:xTaskCreate
FreeRTOS 通过xTaskCreate函数创建任务

![]()
任务名称 :“myfirsttask” 用于调试工具识别;
栈大小 :128(单位通常为字节或字,需根据芯片架构确认);
优先级 osPriorityNormal:正常优先级,可根据需求调整为更高或更低;
最后一个参数为 NULL,表示不保存任务句柄(若需后续挂起 / 删除任务,需传入句柄指针)
这样调用是为了让 RTOS 能识别、调度运行 MyTask 任务,实现 LED 操作的持续执行,契合实时系统多任务并发的需求 。
2.了解了什么是堆,栈
在 RTOS 中,任务的内存管理依赖堆和栈,二者的区别与作用如下:
1.栈(Stack)
也是一个内存空间,cpu的SP寄存器指向它,它可以用来,函数调用,局部变量,多任务系统里保存现场。
2. 堆(Heap)
是一个内存空间,可以从中分配一个小的buffer,用完后再放回去。

假设你有一块 1024 格的方格纸(heap_buf[1024]),用来记录各种信息。每次有人需要写东西时,你要给他分配一些格子。为了知道哪些格子已经被用了,你用一个 标记笔(pos)记录下当前最后一个被占用的格子位置。

当有人说:"我需要 100 个格子写东西!"(my_malloc(100)),你会:
看一下标记笔现在指在哪里(old_pos = pos)。
把标记笔往后移动 100 格(pos += 100)。
告诉对方:"从原来标记的位置开始,往后 100 格都是你的!"
(return &heap_buf[old_pos])

释放空间 ,就是格子用完了,这些格子可以释放了

就是要了100个格子,在一百个格子里装上A-Z
附录
学习资源
韦东山老师课程链接:[具体课程地址]
FreeRTOS 官方文档:https://www.freertos.org/
百问网 FreeRTOS 教程:https://rtos.100ask.net/
更多推荐



所有评论(0)