iar 堆栈设置_如何通过IAR进行堆栈使用分析

本文详细介绍了如何利用IAR进行嵌入式应用的堆栈使用分析,包括理论分析步骤和实际堆栈使用监测。通过理论分析计算合理堆栈大小,并启用堆栈跟踪功能来实时查看堆栈使用情况,提升开发效率。
摘要由CSDN通过智能技术生成
b421c4e6f678075e635c8ad4447287c9.gif

前言

在嵌入式应用开发过程中,由于MCU的存储资源有限,因此堆栈空间大小的设定极为关键。堆栈空间设置过大则会造成资源的浪费,堆栈空间设置过小则可能导致堆栈溢出等问题。如何设定一个合理的堆栈空间大小困扰着很多人,IAR的堆栈使用分析功可以帮助工程师设定一个合理的堆栈空间大小。

本文将介绍如何通过IAR进行堆栈使用分析。IAR的堆栈使用分析功能包括堆栈使用的理论分析和调试过程中实际堆栈使用情况监测(stack观察窗口)。

01

堆栈使用理论分析

1、通过下方路径选项勾选,使能堆栈理论分析。

Project > Options > Linker > Advanced > Enable stack usage analysis

5b26e913cfb40eea73d2e264658dd87d.png

2、堆栈使用情况的理论分析结果会保存在map文件中的“STACK USAGE”段,因此还需要勾选

Linker->List->Generate linker map file选项,以生成map文件。

90f585f73144f2daba96055c57e05147.png

3、在map文件中找到“STACK USAGE”段,理论分析结果中,应用程序Program entry和中断interrupt的堆栈使用是分开的,且提供了这两者的堆栈最大使用数值Max Use和总共的堆栈使用数值Total Use。

27ceb5c6c4ac866c87a3246611d9a2ec.png

4、通过理论分析结果计算合理的堆栈空间以设定其大小,计算公式如下:

CSTACK Size >= maxstack(“Program entry”) + totalstack(“interrupt”) + safety margin(100);

需要设定的堆栈空间大小等于应用程序的最大堆栈使用加上中断服务程序的最大堆栈使用(假设所有的中断同时发生),再加上100字节的预留空间。

5、若应用程序中包含递归调用函数、函数指针间接调用等,还需要额外提供理论分析控制文件指定递归层数和间接调用的函数等,控制文件的具体使用请参阅

02

堆栈空间大小观察窗口

除了堆栈使用理论分析功能外,IAR还提供了观察窗口,在调试过程中可视化应用程序实际堆栈使用。

1、通过Tools > Options > Stack > Enable graphical stack display and stack usage tracking使能堆栈跟踪和可视化分析功能。

19bd52f62a9cb859c6141acfcaaa0180.png

2、进入调试界面后,通过View->Stack打开Stack观察窗口,程序运行一段时间后,手动或由断点让程序暂停运行,stack窗口将显示应用程序运行到当前位置的实际堆栈使用情况。

cd7e5a2172135cad1551e5cd35ce617c.png

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

总结

IAR提供了强大的调试功能,工程师若能了解并灵活应用这些功能将有效提高工作效率。更多IAR的功能介绍和使用技巧可以关注下方微信公众号。

产品咨询:

北京:010-57625727

上海:021-62127690

  深圳:0755-82977971

9f8140b9c2ac70e12bd5a0f62e59dca9.png
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值