在微控制器中堆栈内存分配

时间:2013-05-27 12:03:26

标签: microcontroller microprocessors

如何确定微控制器中特定程序所需的堆栈内存? 例如,假设我有一个内部可能有许多子程序或线程的程序。在我开始执行程序之前,我想修复此程序的堆栈大小。如何标记堆栈的终点。

2 个答案:

答案 0 :(得分:3)

我假设你在谈论一个C语言项目,没有动态分配内存。 堆栈使用的精确计算是非常漫长和复杂的。 您至少需要知道每个函数和调用图的堆栈使用情况(编译器可以提供此信息)。此外:是否有操作系统?每个线程都需要自己的堆栈。有中断例程吗?总堆栈使用量是每个cuncurrent执行流的贡献之和。

在许多情况下,经验方法更有效,即堆栈使用的运行时间度量。例如,您可以使用固定模式填充整个堆栈区域,然后运行有意义的测试,然后检查“脏”区域的大小。可以通过应用安全裕度来计算实际尺寸,例如+ 50%。

答案 1 :(得分:0)

堆栈的限制来自微控制器的内存量。您可以手动执行此操作,这对于大型程序来说非常烦人,或者可以查看精灵转储。在那里你会发现你的全局变量如何占用内存,然后剩下的可以用作堆栈。另外,要找出所需的最大堆栈,您需要查看最长的嵌套函数调用及其参数的大小。通过这种方式,您可以预先估算最大堆栈需求。在最坏的情况下,你需要更多的堆栈,然后需要根据你的函数调用和他们的参数大小,然后你需要做一些优化。