网站关键词描述字数,问卷星网站开发市场调查问卷,化妆网站模板下载免费,怎么百度推广一般 MCU 包含的存储空间有#xff1a;片内 Flash 与片内 RAM#xff0c;RAM 相当于内存#xff0c;Flash 相当于硬盘。编译器会将一个程序分类为好几个部分#xff0c;分别存储在 MCU 不同的存储区。
如图所示#xff0c;在Keil中编译工程成功后#xff0c;在下面的Bul…一般 MCU 包含的存储空间有片内 Flash 与片内 RAMRAM 相当于内存Flash 相当于硬盘。编译器会将一个程序分类为好几个部分分别存储在 MCU 不同的存储区。
如图所示在Keil中编译工程成功后在下面的Bulid Ouput窗口中会输出下面这样一段信息
Program Size: Code28866 RO-data958 RW-data240 ZI-data34224 一、这一串字符含义
答这是keil编译程序后打印这个程序对应的内存分配信息。
Code是指 程序所占用的ROM大小存储在FLASH程序运行期间 不变单位为字节B28866 B
RO-dataread only只读常量 程序中所定义的指令和常量占空间的大小程序运行期间 不变如const型存储在FLASH中。单位为字节B958 B
RW-dataread/write可读可写变量 已被初始化的可读写变量占空间的大小存储在FLASH中。程序运行期间 会变初始化时RW-data从flash拷贝到SRAM。单位为字节B240 B
ZI-datazero initialize 没有被初始化的可读写变量占空间的大小就是 程序中用到的变量并且被系统初始化为0的变量的字节数存储在SRAM中。keil编译器默认把你没有初始化的变量都赋予一个0这些变量在程序运行时是保存在RAM中的。程序运行期间 会变。单位为字节B 34224 B简而言之
1Code代码段存放程序的代码部分
2RO-data只读数据段存放程序中定义的常量
3RW-data读写数据段存放初始化为非 0 值的全局变量
4ZI-data0 数据段存放未初始化的全局变量及初始化为 0 的变量 二、代码存储位置
答简单的说就是在烧写的时候是FLASH ROM中的被占用的空间为 CodeRO DataRW Data
程序运行的时候芯片内部 RAM使用的空间为 RW Data ZI Data一、为什么ROM还要存RW
答因为掉电后RAM中的所有数据都丢失了每次上电RAM中的数据都被重新赋值 每次这些固定的值就是存储在ROM中的。二、为什么不包含ZI段呢
答是因为ZI 数据都是0没必要包含只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。 三、MCU是怎么样的一个执行过程呢
答
①MCU执行过程是 先将RW从ROM中搬到RAM中因为RW是变量变量不能存在ROM中。
②然后 将ZI所在的RAM区域全部清零因为ZI区域并不在Image中所以需要程序根据编译器给出的ZI地址及大小来将相应的RAM区域清零。ZI中也是变量同理变量不能存在ROM中。ROM中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。程序运行之前需要有文件实体被烧录到 STM32 的 Flash 中一般是 bin 或者 hex 文件该被烧录文件称为 可执行映像文件。如图左图所示是可执行映像文件烧录到 STM32 后的内存分布它包含 RO 段和 RW 段两个部分其中 RO 段中保存了 Code、RO-data 的数据RW 段保存了 RW-data 的数据由于 ZI-data 都是 0所以未包含在映像文件中。STM32 在上电启动之后 默认从 Flash 启动启动之后会将 RW 段中的 RW-data初始化的全局变量搬运到 RAM 中 但不会搬运 RO 段即 CPU 的执行代码从 Flash 中读取另外根据编译器给出的 ZI 地址和大小分配出 ZI 段并将这块 RAM 区域清零。其中动态内存堆为未使用的 RAM 空间应用程序申请和释放的内存块都来自该空间。 参考文章
http://t.csdn.cn/j7fQn
http://t.csdn.cn/Fo6oJ