目录
RTOS 内容可以分成 6 类。这样比按实验日期回顾更清楚
一、RTOS 基础概念与任务模型
主要内容:
- RTOS 和裸机程序的区别
- 调度器的作用
- 抢占式调度
- 时间片轮转
- 优先级
- SysTick 和系统节拍
vTaskStartScheduler()- 任务创建、删除、挂起和恢复
- 动态任务和静态任务
核心理解:
任务负责功能
调度器负责决定谁运行
SysTick提供时间节拍
优先级决定抢占关系
二、任务调度与时间管理
主要内容:
vTaskDelay()- 相对延时
vTaskDelayUntil()- 绝对延时
- 周期任务
- 任务运行时间统计
- 任务状态查询
- 软件定时器
- Tickless 低功耗
重点区别:
相对延时:
从当前时刻开始等待
绝对延时:
按照固定时间点周期运行,适合采样和周期任务
三、任务同步与通信
主要内容:
- 队列
- 二值信号量
- 计数信号量
- 互斥锁
- 事件组
- 队列集
- 任务通知
可以按用途记:
| 机制 | 主要作用 |
|---|---|
| 队列 | 传递数据 |
| 二值信号量 | 同步事件 |
| 计数信号量 | 统计资源数量或事件次数 |
| 互斥锁 | 保护共享资源 |
| 事件组 | 等待多个事件组合 |
| 队列集 | 同时等待多个队列或信号量 |
| 任务通知 | 轻量级任务间通信 |
项目1中的应用:
ADC DMA中断 → 任务通知 → AcquireTask
AcquireTask → 队列 → LogTask
多个任务访问寄存器 → 互斥锁
四、临界区、中断和优先级管理
主要内容:
- 临界区
- 中断安全 API
- 中断优先级
FromISR系列函数- PendSV
- SVC
- SysTick
- 任务切换
- 中断嵌套
- 临界段保护
- 优先级翻转
重点理解:
普通任务中:
使用普通 FreeRTOS API
中断服务函数中:
使用 FromISR API
临界区:
暂时禁止任务切换或中断,保护短时间关键操作
你截图里的“临界段保护及任务调度器挂起”“中断管理”“任务挂起和恢复”都属于这一类。
五、FreeRTOS 内核底层
这是你暑假学习里比较深入的一部分。
主要内容:
vTaskStartScheduler()启动过程- SVC 启动第一个任务
- SysTick 产生系统节拍
- PendSV 触发任务切换
- TCB 任务控制块
- 就绪列表和延时列表
pxCurrentTCB- MSP 和 PSP 双栈
- CPU 寄存器现场保存与恢复
- R0~R3、R12、LR、PC、xPSR
- FPU 懒保存机制
- 任务插入和删除链表
list_t、list_item_theap_1至heap_5
任务切换可以简化成:
SysTick到来
↓
判断是否需要切换任务
↓
触发PendSV
↓
保存当前任务上下文
↓
选择下一个最高优先级就绪任务
↓
恢复下一个任务上下文
↓
继续运行
这部分说明你不只是会调用 API,也理解 Cortex-M 如何完成任务切换。
六、内存管理与低功耗
1:内存管理
学习了:
- 堆和栈
- 动态任务内存
heap_1heap_2heap_3heap_4heap_5- 内存碎片
- 首次分配和释放
- 多内存区域
- SRAM1、SRAM2、CCM等内存区域
大致区别:
heap_1:
只分配,不释放
heap_2:
可以分配和释放,但容易产生碎片
heap_3:
调用系统malloc/free
heap_4:
支持合并空闲块,较常用
heap_5:
支持多个不连续内存区域
2:低功耗
学习了:
- 空闲任务
configUSE_TICKLESS_IDLEWFIWFE- Sleep
- Stop
- Standby
- Tickless低功耗
- 中断唤醒
核心逻辑:
没有任务需要运行
↓
进入Idle任务
↓
关闭或减少SysTick唤醒
↓
执行WFI进入低功耗
↓
外部中断或定时事件唤醒
七:汇总
可以压缩成:
RTOS概念
→ 任务创建和调度
→ 延时和时间管理
→ 队列与信号量
→ 互斥锁和事件组
→ 中断与任务通信
→ 优先级和临界区
→ 任务切换底层
→ 内存管理
→ 软件定时器
→ Tickless低功耗
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2301_82190326/article/details/165008681




