2016-03-08 70 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

它也在函数指针中断,并且可能不完全理解虚拟成员函数。 –

相关问题