繁体   English   中英

映射文件中STM32的IAR堆栈使用情况

[英]IAR Stack Usage for STM32 in the map File

我对固件的映射文件中有关堆栈使用情况的一些详细信息的含义不太清楚。 我在地图文件中有这个:

*******************************************************************************
*** STACK USAGE
***

  Call Graph Root Category  Max Use  Total Use
  ------------------------  -------  ---------
  interrupt                      48        112
  Program entry                 704        704
  Uncalled function             424     25 424

有人可以帮助我了解“最大使用”和“总使用”的含义吗? 堆栈的实际大小是多少? 是48 + 704 + 424还是112 + 704 + 25424吗? 堆栈中是否包含未调用函数的数据? 我在IAR帮助中搜索,但不清楚。

提前致谢

“最大使用量”列是指该行类别中任何一个功能的最大使用量。 在第一行中,中断表示标记为中断的任何一个函数的最大堆栈深度为48个字节。 在未调用的函数(可以由函数指针引用或可以用作任务输入函数)中,最深的堆栈为424字节深。 最后,您的程序条目(因此,从复位开始使用主堆栈)的最大深度为704字节。

“总使用量”列用于汇总每个类别中所有项目的堆栈使用量。 因此,对于中断而言,这是所有中断堆栈使用量的总和,并且在Cortex-M3上很有用,因为中断可以嵌套。 如果每个中断都触发并嵌套,则此值将使您希望从函数调用中看到的最大深度减少,而不是内核为您堆叠的寄存器。 对于未调用的函数,此数字的作用要少一些,因为预计未调用的函数将嵌套并且全部同时堆叠。 最后,您的程序条目(只有一个)在所有(一个)程序条目点中的总使用量为704字节。

如果您要确定应该使用的堆栈大小,那么此摘要并不是很有用。 由于未调用函数的大量使用,您可能会遇到IAR无法解决的大量间接调用(通过函数指针或跳转表),或者会有许多RTOS任务。 对于间接调用,有一个IAR用法指示可以调用哪些函数,这将使堆栈分析更加准确。 对于RTOS任务,您需要在映射文件中进一步查找,以查看各个任务输入功能所需的堆栈大小。

如果您只是想查看已分配的堆栈大小,则可以在映射文件的另一部分中查找CSTACK定义,并且它将列出其中的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM