RISC-V IDE MRS2使用笔记(四):编译后静态堆栈调用分析

RISC-V IDE MRS2使用笔记(四):编译后静态堆栈调用分析

今天和大家分享一个提升嵌入式开发效率的功能:MRS2 V2.3.0版本新增的编译后静态堆栈分析(Static Stack Analysis)。开启该功能后,系统将在构建结束后自动分析目标文件,并在编辑器右侧展示函数的实际栈调用关系与栈深度信息。

启用方式:主菜单 Project → Show Static Stack Analysis:

该功能与显示源代码中的函数调用关系不同:源代码中的函数调用关系(Call Graph)是"理想化"的,而编译器在程序构建中进行大量优化/转换,如:

  • 内联函数:小的函数会被直接展开到调用处,在调用图上消失。
  • 尾调用优化:某些函数的尾部调用会被优化为跳转指令,不占用额外的堆栈帧。
  • 编译器特定扩展:使用 interrupt、naked 等编译器关键字或属性的函数,其调用和返回机制与普通函数不同。
  • 库函数链接:源代码中调用的标准库函数(如 malloc, printf),最终链接的是编译好的二进制库。

因此函数堆栈调用关系能一定程度反映目标程序被加载后真实的调用链层级和堆栈占用。

通过表格左上角的按钮,可以找到"显示最深调用链"按钮,点击后筛选出层级depth最深的函数调用链:

通过静态调用图分析,可以找到从入口点(如 main、中断服务程序)开始的所有可能的调用路径。每一条调用路径经过的所有函数的根据调用层级,最右侧depth显示各自的堆栈深度。函数总的堆栈大小为其函数自身的堆栈大小,与其层级下子函数最大的总堆栈大小之和。

若分析得到的某函数的最大的堆栈使用大于分配的栈大小,会在界面前端提示,进行预警。

通过右键列表中某个函数行,弹出的上下文菜单中可选择跳转到定义、跳转到调用位置、拷贝函数名称,方便用户高效浏览和操作。

相关推荐
cheungxiongwei.com1 小时前
VSCode Copilot 如何配置第三方API/自定义端点?
ide·vscode·copilot
Eloudy1 小时前
可在开源 RISC-V 上的裸机操作系统
开源·risc-v
游戏开发爱好者81 小时前
iOS开发工具推荐:Xcode、AppCode、SwiftLint使用心得与效率提升
ide·vscode·macos·ios·个人开发·xcode·敏捷流程
lularible1 小时前
从沙子到车辙(4.2):从片内到片间——SPI、I2C
开源·嵌入式·汽车电子
不脱发的程序猿2 小时前
如何创建一个标准Skill,让嵌入式经验真正复用起来
人工智能·单片机·嵌入式硬件·嵌入式·skill
sramdram6 小时前
基于国民32位MCU的无磁智能水表方案
mcu·32位mcu
hai31524754310 小时前
RISC-V核E203核前向旁路的架构性顽疾
驱动开发·架构·硬件架构·硬件工程·risc-v
IAR Systems15 小时前
软件定义汽车:构建更安全、更智能的汽车应用软件
安全·汽车·嵌入式·iar
时光飞逝的日子17 小时前
基于 RISC-V 架构的边缘 AI 推理引擎优化设计
risc-v·模型量化·推理引擎·边缘 ai·向量扩展·低功耗优化
Jason_zhao_MR18 小时前
纳秒级抖动×24小时零丢帧:RK3576工业级EtherCAT主站全拆解
大数据·人工智能·单片机·嵌入式