主题中讨论的其他器件: 冲击
工具/软件:TI C/C++编译器
我正在从事 TMS320F280049C DSP 工作。 我使用堆栈使用视图分析了不同函数的堆栈大小。 我要附上它的屏幕截图。 ADCAISR 已占用最大40字节的存储空间。 如何增加该大小以避免堆栈溢出。 为什么所有函数都固定40字节?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
我正在从事 TMS320F280049C DSP 工作。 我使用堆栈使用视图分析了不同函数的堆栈大小。 我要附上它的屏幕截图。 ADCAISR 已占用最大40字节的存储空间。 如何增加该大小以避免堆栈溢出。 为什么所有函数都固定40字节?
Chirag、
堆栈使用视图是对每个函数堆栈使用情况的静态分析。 我认为专用大小是特定函数本身使用的大小、而包含大小是特定函数及其调用的任何嵌套函数使用的大小。 中断不包含在包含的大小中、因为静态分析不知道何时可能发生中断。 对于 C2000器件、显示的大小为16位字、而不是字节。
在本例中、ADCA1ISR 静态使用40个字。 黄色应该表示其用途接近堆栈大小、但我发现无论堆栈大小如何、图形始终以黄色显示最大的条。 您的堆栈可能远大于40个字。 栈大小在项目属性-> C2000链接 器->基本选项中指定。 一个空白框将堆栈默认为0x400字。
此致、
David
Chirag、
堆栈图上的悬停文本可能表示字节、但显示的值以16位字表示。 下面是一个显示了26个字的 adcA1ISR 专用堆栈用法的示例:
在我在 adcA1ISR()中声明了一个100 16位字局部数组之后,这里是同一个项目。 本地变量位于栈上。
您可以看到,adcA1ISR()堆栈使用增加了100个16位字。
此外、悬停文本不显示最大堆栈使用率的百分比。 我不确定它到底显示了什么。 它似乎采用最大的堆栈用户并将其用作最大堆栈大小、然后显示其使用百分比。 这不是最大堆栈大小。 在 C2000连接器->基本选项的项目属性中指定了堆栈大小。
在上面、我的项目的堆栈大小为0x200 16位字。
工具中没有动态堆栈使用查看器。 您可以在初始化期间使用已知值(例如0xdead)填充堆栈、然后运行代码一段时间。 停止它、然后检查堆栈使用情况。
此致、
David