IAR有相关选项,编译完成后,自动分析最大堆栈深度,并将分析结果放在map文件中。

具体操作如下:

01
堆栈使用理论分析
1、通过下方路径选项勾选,使能堆栈理论分析。
Project > Options > Linker > Advanced > Enable stack usage analysis
IAR STM32 最大堆栈分析2、堆栈使用情况的理论分析结果会保存在map文件中的“STACK USAGE”段,因此还需要勾选
Linker->List->Generate linker map file选项,以生成map文件。
IAR STM32 最大堆栈分析3、在map文件中找到“STACK USAGE”段,理论分析结果中,应用程序Program entry和中断interrupt的堆栈使用是分开的,且提供了这两者的堆栈最大使用数值Max Use和总共的堆栈使用数值Total Use。
IAR STM32 最大堆栈分析4、通过理论分析结果计算合理的堆栈空间以设定其大小,计算公式如下:
CSTACK Size >= maxstack(“Program entry”) + totalstack(“interrupt”) + safety margin(100);
需要设定的堆栈空间大小等于应用程序的最大堆栈使用加上中断服务程序的最大堆栈使用(假设所有的中断同时发生),再加上100字节的预留空间。
5、若应用程序中包含递归调用函数、函数指针间接调用等,还需要额外提供理论分析控制文件指定递归层数和间接调用的函数等,控制文件的具体使用请参阅阅读原文中的“IAR C/C++ Development Guide”手册。
02
堆栈空间大小观察窗口
除了堆栈使用理论分析功能外,IAR还提供了观察窗口,在调试过程中可视化应用程序实际堆栈使用。
1、通过Tools > Options > Stack > Enable graphical stack display and stack usage tracking使能堆栈跟踪和可视化分析功能。
IAR STM32 最大堆栈分析2、进入调试界面后,通过View->Stack打开Stack观察窗口,程序运行一段时间后,手动或由断点让程序暂停运行,stack窗口将显示应用程序运行到当前位置的实际堆栈使用情况。
IAR STM32 最大堆栈分析

鼠标移动到stack进度条位置时,将显示具体的堆栈使用信息。其中灰色部分代表开始运行到当前断点时刻已使用的最大堆栈空间,绿线位置代表当前断点时刻的堆栈指针,浅灰色部分代表未使用的堆栈空间。Stack窗口还显示当前堆栈指针地址和内容等信息。

相关文章:

  • 2022-12-23
  • 2022-01-09
  • 2021-11-08
  • 2021-08-14
  • 2021-12-29
  • 2021-08-21
  • 2022-12-23
猜你喜欢
  • 2021-09-29
  • 2022-01-02
  • 2021-05-27
  • 2021-12-08
  • 2021-11-28
  • 2021-04-08
  • 2022-12-23
相关资源
相似解决方案