之前总结过编译文件大小的一些研究:
https://blog.csdn.net/ZenNaiHeQiao/article/details/83343504
总结起来是这样的:
(1)

单片机:生产的编译信息中,包含了
code : 代码信息
RO-data: 只读信息–》程序中的指令 和常量
RW-data: 被初始化的变量
ZI-data: 无需初始化的变量
我做了这么一个实验,
①增加一个很大的数组,不初始化或者初始化为0; 它会被分配到ZI-data信息中。
②增加一个很大的数组,切对其进行初始化, 它会被分配到RW-data信息中
烧录文件的大小=code + RO-data + RW-data
增加ZI-data的大小,bin文件未必增大很多。 应该是,对于不需要初始化赋值的变量,ZI-data信息包含了是一些 起始地址 ,数据大小 等等这一些信息。
芯片需要的RAM大小=RW-data+ZI-data
bin文件我们称之为 ARM映像文件(image文件):Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
ARM程序的执行过程:
1. 将RW从ROM中搬到RAM中,因为RW是变量。
2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量.
上一篇:【stm32f103】USART RX实现(寄存器版)
下一篇:STM32-自学笔记(11.通过串口与PC通信,发Hello)
推荐阅读
史海拾趣



ASM10DTBD-S664






京公网安备 11010802033920号