FreeRTOS 是一款开源的实时操作系统(RTOS)内核,专为微控制器和小型微处理器设计。它提供任务调度、任务间通信、定时器、内存管理等核心功能,是嵌入式领域最广泛使用的 RTOS 之一。
学习路径
按顺序阅读,每篇都建立在前一篇的基础上:
| 序号 | 笔记 | 核心内容 | 前置知识 |
|---|---|---|---|
| 01 | 基础与文件结构 | 文件组织、基本数据类型、整体架构 | 无 |
| 02 | 任务管理与调度 | 任务创建/删除、优先级、调度算法、状态转换、空闲任务 | 01 |
| 03 | 队列 | 队列机制、读写阻塞、FIFO/LIFO、邮箱模式 | 02 |
| 04 | 中断处理 | ISR 专用 API、延迟中断处理、二值信号量同步、中断优先级 | 03 |
| 05 | 软件定时器 | One-shot/Auto-reload、Daemon Task、回调 vs 中断 | 04 |
| 06 | 资源管理 | 临界区、挂起调度器、互斥锁、优先级反转、死锁、守门员任务 | 04 |
| 07 | 事件组 | 事件标志、WaitBits/SetBits、多任务同步 | 04 |
| 08 | 任务通知 | 轻量级直连通知、eNotifyAction、完整版 vs 简化版 API | 07 |
| 09 | 内存管理 | heap_1 ~ heap_5 五种内存分配方案对比 | 02 |
| 10 | FreeRTOSConfig 配置 | 常用配置宏详解、裁剪内核功能 | 01-09 |
核心概念一览
┌─────────────────────────────────────────────────────────┐
│ FreeRTOS 内核 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │ 任务管理 │ │ 调度器 │ │ 内存管理 │ │ 定时器 │ │
│ └──────────┘ └──────────┘ └──────────┘ └────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 任务间通信(IPC) │ │
│ │ 队列 / 信号量 / 互斥锁 / 事件组 / 任务通知 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 中断管理 │ │ 资源管理 │ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
任务间通信方式选择
| 方式 | 适用场景 | 速度 | 能否多对多 |
|---|---|---|---|
| 队列 | 传递数据(复制语义) | 中 | 多写多读 |
| 二值信号量 | 中断→任务同步、互斥访问 | 快 | 一对一 |
| 计数信号量 | 资源计数、多事件计数 | 快 | 多对多 |
| 互斥锁(Mutex) | 资源互斥访问(带优先级继承) | 快 | 多对一 |
| 事件组 | 等待多个条件同时满足 | 中 | 多对多 |
| 任务通知 | 直接通知单个任务(最快) | 极快 | 一对一 |
| 队列集 | 一个任务等多个队列(不推荐) | 中 | 多对一 |
选择原则
能用任务通知就不用其他方式(最快、最省内存);需要传数据用队列;需要互斥访问用互斥锁;需要等多个条件用事件组。
相关:返回学习笔记