arm中文社区
直播中

温暖镜头

9年用户 906经验值
擅长:电源/新能源 制造/封装
私信 关注
[资料]

KAN316如何确定应用程序的堆栈使用情况

堆栈是以后进先出(LIFO)方式添加或删除数据的内存区域。
在RTOS中,每个线程都有一个单独的内存区用于堆栈。
在函数执行期间,数据可能会添加到堆栈的顶部;当函数退出时,它会从堆栈中删除该数据。
在Cortex-M处理器系统中,需要考虑两个堆栈存储区域:
·在RTOS内核启动之前和中断服务例程(ISR)使用系统堆栈。
它通过主栈指针(MSP)进行寻址。
·线程堆栈(S)由运行的RTOS线程使用,并通过进程堆栈指针(PSP)进行寻址。
由于堆栈的内存区域在大小上受到限制,因此在堆栈上分配比可用内存更多的内存可能会导致程序崩溃或堆栈溢出。
在嵌入式系统中,外部程序事件的时序会影响程序流,而堆栈大小问题可能会产生不常见的零星程序错误。
因此,了解应用程序的堆栈内存要求至关重要。
为了计算(并因此优化)所需的堆栈存储器大小,可以使用以下方法:
·静态分析(使用调用树分析)在构建时(例如通过链接器)执行。
·动态分析(使用堆栈水印)在运行时(例如在调试会话中)执行。

更多回帖

发帖
×
20
完善资料,
赚取积分