簡體   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