📚 堆栈深度·测量与防护
30章
⭐ 实时系统 · 友好
01
堆栈基础:什么是堆栈?堆栈在RTOS中的作用与原理。
原理
RTOS
02
堆栈溢出危害:数据损坏、系统崩溃、安全漏洞。
危害
安全
03
堆栈深度测量原理:基于栈指针(SP)和栈底地址的测量方法。
测量
SP
04
静态分析方法:通过代码静态分析估算最大堆栈深度。
静态
估算
05
动态测量方法:在任务运行时填充栈空间并扫描水位线。
动态
水位线
06
栈填充模式设计:0xDEADBEEF、0x5A5A5A5A等经典填充模式的选择。
填充
模式
07
水位线扫描算法:从栈底向栈顶扫描,寻找填充模式被破坏的位置。
扫描
算法
08
任务创建时的栈初始化:在任务创建时对栈空间进行填充。
初始化
任务
09
周期性栈检查:在空闲任务或低优先级任务中定期检查栈水位。
检查
空闲任务
10
栈溢出检测硬件支持:MPU/MMU在栈溢出防护中的应用。
硬件
MPU
11
栈溢出异常处理:断言、重启、记录等优雅处理方式。
异常
处理
12
FreeRTOS栈检测机制:内置栈溢出钩子函数详解。
FreeRTOS
钩子
13
uC/OS栈检测机制:任务栈统计函数与实现。
uC/OS
统计
14
RT-Thread栈检测机制:栈溢出检测与动态栈扩展。
RT-Thread
动态
15
栈空间预留策略:在计算出的最大深度上增加安全余量(如20%)。
余量
策略
16
中断嵌套对栈的影响:中断嵌套深度如何影响任务栈需求。
中断
嵌套
17
递归函数与栈:递归调用对栈深度的非线性影响及应对策略。
递归
非线性
18
多任务环境下的栈共享:任务栈独立与协程栈共享的权衡。
共享
协程
19
栈溢出复现与调试:使用JTAG/SWD调试器定位栈溢出根因。
调试
JTAG
20
栈回溯技术:利用调用栈回溯分析溢出发生时的函数调用链。
回溯
调用链
21
栈溢出防护的软件看门狗:结合看门狗定时器实现溢出后系统恢复。
看门狗
恢复
22
栈深度测量工具介绍:IAR C-SPY、Keil RTX等IDE的栈分析工具。
工具
IDE
23
栈深度测量工具介绍:Percepio Tracealyzer等可视化分析工具。
Tracealyzer
可视化
24
栈溢出防护设计模式:Guard Page、Canary、Shadow Stack等。
模式
防护
25
Canary(金丝雀)技术:在栈中插入特殊值,检测溢出前是否被修改。
Canary
金丝雀
26
Guard Page(保护页)技术:利用MMU设置不可访问的内存页。
Guard
MMU
27
Shadow Stack(影子栈)技术:硬件辅助的返回地址保护。
影子栈
硬件
28
栈深度与系统实时性:栈检查对系统实时性的影响与优化。
实时性
优化
29
综合案例:基于STM32+FreeRTOS的栈溢出防护系统设计。
案例
STM32
30
课程总结与最佳实践:堆栈深度测量与溢出防护的工程落地建议。
总结
最佳实践