2016-03-08 35 views
-1

我想知道什麼是確定程序使用多少堆棧空間的最佳方法,是否有任何技術或工具來生成統計信息,而不是手工計數?如何確定一個嵌入式程序使用多少堆棧空間

該程序希望分析是代碼編寫器中的C程序,如果這有所作爲。

謝謝

+5

堆棧中毒。 –

+0

這可能很重要,因爲了解工具鏈可以考慮由該工具鏈提供的技術,而不是通用技術。然而,「Code Composer」只告訴我們關於IDE的信息,而不是使用什麼編譯器/鏈接器,什麼版本或什麼目標,或者您是否使用DSP/BIOS或其他操作系統。這是你應該包括的信息。順便說一句:你應該閱讀這個:http://processors.wiki.ti.com/index.php/Stack_issues#Finding_out_static_stack_usage。 – Clifford

+0

[這裏是一篇很好的博客文章](http://embeddedgurus.com/stack-overflow/2009/03/computing-your-stack-size/)。 – Lundin

回答

5

您可以使用某種模式(例如0xDEADBEEF)填充堆棧ram,然後運行一段時間,然後檢查堆棧以查看使用了多少。您仍然需要進行分析以找到最深的路徑,然後在應用程序中儘可能生成最深的嵌套中斷。

+0

這是一個很好的輔助檢查,但使用編譯器的堆棧深度和手動靜態分析是最好的方法。堆棧RAM方法假設您的動態測試達到最深的堆棧使用率,這可能只發生在動態測試中未命中的某個錯誤路徑中。 –

+0

你完全需要做分析。如果你已經完成了分析並且創造了最糟糕的情況,那麼這兩者應該排隊。在任何情況下,如果分析和測量不匹配,你需要找出原因。 –

2

有大約上運行TI網站here靜態分析工具的一些信息。一般來說,靜態分析會告訴你從main()調用最深的調用樹有多少堆棧,但它不包含ISR。您需要手動查看呼叫樹並添加ISR呼叫深度。如果您有多個ISRS優先級別,請不要忘記,更高優先級的ISR可以中斷較低優先級的ISR。

+0

注意:某些體系結構有一個獨立的中斷堆棧,但在任何情況下,如果中斷是可嵌套的,則需要考慮最壞情況下的嵌套情況。同樣,如果使用TI的DSP/BIOS或SYS/BIOS等實時操作系統,每個任務環境都會有獨立的堆棧;靜態分析將顯示每個線程入口點最深的堆棧,但不會考慮存儲任務上下文所需的附加堆棧。 – Clifford

+0

它也在函數指針中斷,並且可能不完全理解虛擬成員函數。 –

相關問題