目录
- 一、概述
- 二、编译结果
- 三、map文件
一、概述 本文主要记录下keil环境下,分析空间资源使用情况的基本方法。
二、编译结果 使用keil进行编译后,首先会得到如下信息:
文章图片
其中:
Code
表示程序代码部分RO-data
表示 只读的数据(read-only),如程序定义的常量const temp;RW-data
表示 可读写的数据(read-write),如已初始化的全局变量ZI-data
表示 0初始化的可读写变量(zero initialized),如未初始化的全局变量
flash
=Code
+ RO-data
+ RW-data
占用的
ram
= RW-data
+ ZIdata
- Q:这里RW-data为什么既占用flash,又占用ram呢?
A:这是因为已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM中。 - Q:为什么ROM Size不包括ZI Data?
A:这是因为已经初始化的数据,在掉电后需要保存初始值,以便上电运行后重载,因此存在rom中。而ZI Data数据都是0,上电运行后直接清零即可,包含进去反而浪费存储空间。
文章图片
将map文件拖到keil中查看,可以在最下面看到信息:
文章图片
这里直接给出了整个程序ram和rom的使用情况。当然map文件的使用情况不仅如此,目前主要用到的有:
- Global Symbols
这部分内容给出了函数和全局变量的起始地址。
当需要确认某个变量是否地址对齐时,可以从这里快速查找。如uin32_t类型的变量,起始地址不是4字节对齐,则会跨字节访问,有时会出现意想不到的问题。这时或许可以通过__align(4)关键字修饰来调整。
从这里也可以看到全局变量的地址分布,在分析数组越界等异常行为时,往往会有帮助。 - Image component sizes
在这一部分,可以查看单个C文件的资源使用情况。
文章图片
当需要对空间进行优化时,可以快速定位哪个源文件使用了较多的资源空间,进而查看是否可以进行缩减。
推荐阅读
- LINUX|【正点原子Linux连载】第五十八章 Linux INPUT子系统实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- LINUX|【正点原子Linux连载】第六十四章 Linux 多点电容触摸屏实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- 嵌入式|陀螺仪数据处理(BMI088)
- 嵌入式|CAN通讯
- STM32的使用|STM32F4软件IIC的使用
- stm32|基于stm32f103与IIC的0.96OLED屏幕显示字符与平滑滚动显示
- 嵌入式|STM32 0.96寸4针IOLED显示器驱动IIC(HAL库)
- stm32|STM32Cubemx——IIC驱动0.96寸OLED
- stm32|基于I2C/SPI总线的温湿度采集与OLED显示