使用keil编译工具分析函数调用关系和栈使用情况的一种简单方法
·
1.考虑栈分配的场景
- 无论是 裸机 还是 RTOS 都需要用户合理的分配栈空间,如果栈空间分配的小了,可能会出现栈溢出,分配的大了则会产生浪费。
- 尤其是在使用 RTOS 的场景下,因为每一个 任务 都需要分配独立的栈,所以合理的分配栈空间就显得尤为重要。
2.利用 keil 自带的工具分析栈的使用情况
-
选中如下选项,编译工具链会自动分析函数的调用关系,并生成对应文档

-
生成的文档和可执行文件在同一目录下

-
文档中有每个函数的调用关系,通常会有如下内容:

-
利用上述信息足够分析出栈的最大使用情况,也可以利用这些信息分析程序结构。
3. 注意点
- 在使用裸机时(以cortex-m为例),如果没有特别的设置,无论是主程序中还是中断程序通常只使用一个栈,也就是MSP,这时候预估栈的大小是就是 主程序调用链的栈 + 中断程序调用链的栈 + 产生中断或者异常时的硬件或者软件保存上下文的压栈(考虑中断抢占产生的嵌套压栈)
- 在使用 RTOS(以freertos为例) 中断和主程序使用MSP, 任务使用PSP,MSP的分配主要考虑中断的调用链,主程序的调用链所使用的栈会在调度器开始调度后被回收。每个任务都有独立的栈,任务栈的分配主要考虑 任务函数本身调用链的栈 + 任务切换时保存上下文所用的空间
更多推荐

所有评论(0)