MCU中几个常用的段类型如下:

Section R/W 描述
.data RW 带有初值的静态或全局变量
.rodata RO 只读变量
.bss RW 没有初值或初值为0的静态或全局变量。该段也称为.zi(Zero Initialized)
.text RO 代码段。该段也称为.code

.data和.bss段称为readwrite data,.rodata段称为readonly data, .text段称为readonly code。

在IAR平台下,工程编译后生成的.map文件中包含这几项的使用情况,如下:

  3 252 bytes of readonly  code memory
    106 bytes of readonly  data memory
  1 357 bytes of readwrite data memory

设置项目的输出文件格式为bin文件,观察bin文件的大小:

Bin File Size

可以看到Bin文件的大小恰好等于上述前两项之和。

Bin文件仅包含数据内容,相当于Flash,于是得到如下结论:

Used Flash = readonly code memory + readonly data memory
Used RAM   = readwrite data memory

疑问

ARM的映像文件包含了.rodata, .text和.data几个段的数据,为什么在这里bin文件大小却等于.rodata和.text两项的和呢?