最近经常有攻城狮咨询,使用我们的MCU时,如何知道当前使用的栈大小情况呢?针对这个问题,我也在网上查阅了一些方法,对比来看,使用填充法是最直观的。我这边通过使用新唐M480来编写程序,计算当前栈使用情况,各位有更好的办法也欢迎推荐给我,三人行必有我师焉。
1、首先确定当前设定的栈区域大小,比如在startup文件上设定0x800,这个大小可以根据实际使用的情况修改大小。
2、调试的时候设计优化等级最高,方便调试验证。
3、栈使用是栈顶地址向下使用的,所以我们要确认下栈顶地址。这个可以通过debug查看SP指针地址,这个就是栈顶地址。
4、定义栈顶和栈底地址
栈顶地址 = 栈底地址+栈大小
5、给栈空间填写固定数据,方便后续查看栈使用情况
6、编写计算栈使用情况函数
7、验证
赋初值地址范围:0x20000038 -0x20000838写0x11111111
8、执行程序
9、打印log
查看发现使用的地址范围是0x20000770 -0x20000838,计算实际使用是200个字节,符合log结果。这里要注意下,我是单步执行的,如果在计算程序下面由增加其他程序,那这个结果就会不准确,最直观是通过debug去查看哪些空间未使用。
=
