如果说前五篇我们是在“搞基建”(画图纸、打地基、盖房子、装保险箱),那么这一篇,我们要真正入住并开始生活了。
在程序运行的那一刻,栈 (Stack) 和 堆 (Heap) 接管了比赛。这是嵌入式系统的“狂野西部”,也是 90% 的“随机死机”、“跑飞”和“莫名其妙数据篡改”的案发现场。
1. 引言:相向而行的列车
在大多数 MCU 的内存布局中,栈通常从 RAM 的最高地址向下生长,堆(如果有)从 BSS 段的结束地址向上生长。
-
静态内存(.data/.bss): 是“死”的,编译完就定死了,很安全。
-
动态内存(Stack/Heap): 是“活”的。
-
函数调用深一点,栈就长一点。
-
中断来得猛一点,栈就爆一点。
-
malloc多一点,堆就碎一点。
-
它们就像两列在同一条铁轨上相向而行的列车,中间没有物理屏障。一旦相撞(Stack Overflow 或 Heap Collision),系统就会瞬间崩溃,且现场极难保留。
2. 栈 (Stack):沉默的杀手
2.1 裸机与 RTOS 的维度打击
-
裸机模式: 这是一个二维世界。整个系统只有一个栈。你只需要计算
Max(Call_Depth) + Max(ISR_Depth)。只要留够余量,通常很稳。 -
RTOS 模式: 这是一个三维世界。
-
每个任务都有自己的栈。
-

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



