Category Archives: ARM

ARM中CODE、RO、RW、ZI的含义

当编译一个ARM程序后,会出现Code=...  RO-data= ...  RW-data=...  ZI-data=...  的提示报告,如:

Program Size: Code=976 RO-data=344 RW-data=4 ZI-data=612  

那么这些数据的含义究竟是什么呢?

CODE:代码区占用大小,即程序指令的大小;

RO:只读变量占用大小,用于保存常量和查询表的大小;

RW:读写变量占用大小,是已初始化为非0的变量的大小;

ZI:全零变量占用大小,是初始化为0的变量,或者未初始化的变量(编译器自动将这些变量清0)

实际使用的ROM和RAM大小是:

ROM = CODE + RO + RW

RAM =  RW + ZI

这里可能会有一个疑问,就是RW为什么也会占用ROM空间?这是因为数据不会凭空产生,对于有明确初始值的变量,需要事先存储该变量的初始值,在程序启动的最开始阶段,这些变量被初始化并移至RAM区。

AXF、HEX与BIN的差别

在使用ARM工具链生成目标时,一般可以生成AXF、HEX和BIN三种不同的文件格式,那么这三种格式有什么异同呢?

1)AXF文件是ARM特有的文件格式,除了包含BIN文件的内容外,还包括了许多其他的调试信息。

2)HEX文件是ASC编码的,包括地址信息,一般不需要用户再指定下载地址。

3)BIN文件不包括地址信息,所以下载时必须指定下载的首地址。

可见,AXF与BIN文件的区别在于是否包含调试信息,而BIN文件与HEX文件的主要差别在于是否包含地址信息。