嵌入式静态分析到底在分析什么?

从调用图到栈水位,彻底搞懂堆栈空间是怎么算出来的

做嵌入式软件,很多人都听过:

静态分析。

但一提到静态分析,第一反应往往是:

“是不是就是检查代码有没有Bug?”

其实远不止如此。

静态分析不运行程序,而是直接利用:

  • 源代码;
  • 编译器生成的信息;
  • 符号表;
  • 汇编代码;
  • 函数调用关系;
  • 链接器 MAP 文件;
  • 类型和控制流信息;

去推断程序在运行过程中可能发生什么。

其中有一项非常重要、同时又经常被低估的能力:

堆栈使用量分析。

尤其是在 MCU、RTOS、医疗设备、工业控制等资源受限系统中,一个任务到底需要多少栈?

一个函数最多会占多少栈?

整个调用链最深能达到多少?

中断进来以后还会增加多少?

这些问题如果没有提前分析清楚,最终非常容易演变成:

运行正常
↓
某个特殊工况
↓
函数调用变深
↓
中断抢占
↓
栈空间耗尽
↓
内存破坏
↓
程序跑飞

更麻烦的是:

栈溢出通常不是立即死机。

它可能先悄悄覆盖

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值