Keil学习笔记(1)——查看编译后代码量、RAM的使用情况

   日期:2021-04-09     浏览:141    评论:0    
核心提示:一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分为好几个部分,分别存储在 MCU 不同的存储区。ROM:即单片机的FLASH,只读存储器RAM:随机存储器Keil 工程在编译完之后,会有相应的程序所占用的空间提示信息,如下所示:Program Size: Code=87556 RO-data=35944 RW-data=4036 ZI-data=61316除以1024就是KB大小,如87556=85.50KB

一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分为好几个部分,分别存储在 MCU 不同的存储区。

ROM:即单片机的FLASH,只读存储器
RAM:随机存储器

Keil 工程在编译完之后,会有相应的程序所占用的空间提示信息,如下所示:

Program Size: Code=87556 RO-data=35944 RW-data=4036 ZI-data=61316
除以1024就是KB大小,如87556=85.50KB

上面提到的 Program Size 包含以下几个部分:

  • Code: 代码段,存放程序的代码部分;
  • RO-data: 只读数据段,存放程序中定义的常量;
  • RW-data: 读写数据段,存放程序中定义并且初始化的全局变量和静态变量;
  • ZI-data: 0数据段,存放程序中定义了但没有初始化的全局变量和静态变量;

编译完工程会在 _build 文件夹里生成一个 .map 的文件,该文件说明了各个函数占用的尺寸和地址,在文件的最后几行也说明了上面几个字段的关系:

Total RO Size (Code + RO Data) 123500 ( 120.61kB)
Total RW Size (RW Data + ZI Data) 65352 ( 63.82kB)
Total ROM Size (Code + RO Data + RW Data) 123812 ( 120.91kB)

  1. RO Size 包含了 Code 及 RO-data,表示程序占用 Flash 空间的大小
  2. RW Size 包含了 RW-data 及 ZI-data,表示运行时占用的 RAM 的大小
  3. ROM Size 包含了 Code、RO Data 以及 RW Data,表示烧写程序所占用的 Flash 空间的大小

程序运行之前,需要有文件实体被烧录到 STM32 的 Flash 中,一般是 bin 或者 hex 文件,该被烧录文件称为可执行映像文件。如下面左图中所示,是可执行映像文件烧录到 STM32 后的内存分布,它包含 RO 段和 RW 段两个部分:其中 RO 段中保存了 Code、RO-data 的数据,RW 段保存了 RW-data 的数据,由于 ZI-data 都是 0,所以未包含在映像文件中。

STM32 在上电启动之后默认从 Flash 启动,启动之后会将 RW 段中的 RW-data(初始化的全局变量)搬运到 RAM 中,但不会搬运 RO 段,即 CPU 的执行代码从 Flash 中读取,另外根据编译器给出的 ZI 地址和大小分配出 ZI 段,并将这块 RAM 区域清零,如下图所示;其余RAM空间作为动态内存堆使用。

• 由 Leung 写于 2021 年 4 月 8 日

• 参考:KEIL MDK编译后的代码量和RAM使用详解
    KEIL MDK 查看代码量、RAM的使用情况

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服