新唐MCU技术
直播中

李辉

8年用户 1422经验值
私信 关注
[问答]

请问如何在Keil开发环境中查看代码大小和SRAM使用情况?

如何在Keil开发环境中查看代码大小和SRAM使用情况?

回帖(2)

李兵

2025-8-20 16:57:22
编程后,Keil 将显示以下消息:
程序大小:Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116
参数具有以下含义:
注意:单位为字节。

编程时,Flash中占用的空间为:代码(RO数据)(RW数据)
当程序运行时,芯片内部SRAM使用的空间为:(RW数据)(ZI数据)
举报

贾伟刚

2025-8-25 17:20:46

在Keil MDK开发环境中,查看代码大小(Flash占用)和SRAM使用情况的方法如下:


方法1:通过编译输出信息查看(推荐)



  1. 编译项目:点击工具栏的 Build(编译)或 Rebuild(重新编译)按钮。

  2. 查看输出窗口:编译完成后,在底部的 Build Output 窗口会显示类似以下信息:
    Program Size: 
    Code:   12345 bytes  (Flash中代码大小)
    RO-Data: 2345 bytes  (只读数据,占用Flash)
    RW-Data: 1024 bytes  (已初始化的全局变量,占用Flash和RAM)
    ZI-Data: 4096 bytes  (未初始化/初始为0的变量,仅占用RAM)


    • Flash总占用 = Code + RO-Data + RW-Data

    • RAM总占用 = RW-Data + ZI-Data



方法2:查看.map文件(详细内存分配)



  1. 生成.map文件

    • 打开项目配置:Project → Options for Target → Listing

    • 勾选 Linker Listing 下的 Memory Map


  2. 编译后查看.map文件

    • 文件路径在项目目录的 Objects 文件夹中(如 project_name.map)。

    • 在文件中搜索以下关键词:

      • Execution Region ROM(Flash占用汇总)

      • Execution Region RAM(SRAM占用汇总)

      • Total RO Size:Flash总大小(Code + RO-Data)

      • Total RW Size:RAM总大小(RW-Data + ZI-Data)




方法3:调试时查看内存使用(实时)



  1. 进入调试模式:点击工具栏的 Debug 按钮。

  2. 打开内存报告

    • 方式一:菜单栏选择 View → Memory Usage

    • 方式二:在调试界面右侧找到 Memory Map 窗口(若无则通过 View → Memory Map 打开)。


  3. 解读结果

    • 内存区域:显示不同内存段(如Flash、SRAM)的起始/结束地址。

    • 使用情况:明确标注 Used(已用)和 Unused(未用)空间大小。



关键术语说明

































项目 说明
Code 代码占用的Flash大小(函数、指令)
RO-Data 只读数据(如常量字符串、const常量),占用Flash
RW-Data 已初始化的全局/静态变量(占用Flash存储初始值,运行时复制到RAM)
ZI-Data 未初始化或初始为0的变量(仅占用RAM,启动时由启动代码清零)
RAM占用 = RW-Data + ZI-Data
Flash占用 = Code + RO-Data + RW-Data

优化建议



  • 若RAM/Flash超限,可:

    1. 检查.map文件定位大内存对象。

    2. 优化数组大小或使用压缩算法。

    3. 启用编译器优化:Options for Target → C/C++ → Optimization Level



通过以上方法,可快速掌握Keil中的存储资源使用情况,确保项目在目标硬件的资源限制内运行。

举报

更多回帖

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