示例
使用keil编译完成后, 程序会弹出如下类似信息, 可能有些人不关注此类信息, 其实某些时候还是挺有帮助的, 比如裁剪程序尺寸, 使其大小能装进目标机器运行时;
Program Size: Code=33112 RO-data=1108 RW-data=1236 ZI-data=89452
FromELF: creating hex file...
解释
Code 表示代码占用空间;RO =read-only;RW =read-write;ZI =zero-initialized;
以LPC1768的arm独立运行固件的地址分配为例, 图示如下:
+-----------+ 0x1000 8000 \
| Unused | |
+-----------+ |
| ZI data | <--(clear) | RAM
+-----------+ |
| RW data | <--(copy)---|---+
+-----------+ 0x1000 0000 / |
|
|
+-----------+ 0x0008 0000 \ |
| Unused | | |
+-----------+ | |
| RW init |-------------|---+
+-----------+ |
| RO data | | ROM (Flash)
+-----------+ |
| User code | |
+-----------+ |
| Boot code | |
+-----------+ |
| Vectors | |
+-----------+ 0x0000 0000 /
因此:
- ROM (flash) space = code + RO-data + RW-data;
- RAM = RW-data + ZI-data;
参考文章
- ROM and RAM in ARM 文章基本来源于此问题高票答案;
- Keil/MDK 小知识点:Program size: Code, RO-data , RW-data, ZI-data 解释(什么意思) ;
- ARM Program Size - ZI data? arm社区的问答帖子内容和stackoverflow的内容差不多, 但不详细;
|