stm32分散加载文件简单分析.sct(二)

stm32分散加载文件简单分析.sct(二)_第1张图片
以第一道程序的分散加载空间为例,说明一下内部语句的含义。

在此之前,先讲解一下RO,RW,ZI还有Code的含义。

RO,RW,ZI也被称为RO-data,RW-data,ZI-data,其与Code含义如下:

  1. Code :即代码所占用的空间。
  2. RO-data:(Read Only)是只读常量所占用的空间,如const型常量。
  3. RW-data :(Read Write)是可读可写型变量,是程序中已经初始化的变量所占用的空间。
  4. ZI-data:(Zero Initial)是未初始化的static变量和全局变量以及堆栈所占用的空间,这部分变量在程序开始运行时会被系统初始化为零。

上述参数和Flash ROM,SRAM的对应关系为:

- Flash ROM = Code + RO-data + RW-data
- SRAM = RW-data + ZI-data

其中,RW-data在Flash和SRAM中均有存在,这是因为SRAM是掉电不保存信息的存储器,所以程序中已经赋初值的变量需要存储在Flash中,在程序运行时再从Flash拷贝到SRAM中,所以Flash和SRAM中均有RW-data存在。

举STM32F407ZGT6的例子进行说明,STM32F407ZGT6的Flash大小为1MB,SRAM大小为(128KB+64KB)。其中SRAM的128KB和64KB的地址是不连续的,所以分开表示,后面的64KB称为CCM(Core Coupled Memory),是由内核直接访问的,不能由外设进行访问。

下面的示意图用红色标志出了STM32F407ZGT6的Flash的空间分配和前SRAM前128KB的空间分配。
stm32分散加载文件简单分析.sct(二)_第2张图片
结合上图说明STM32F407ZGT6的启动过程(采用Cortex-M4、Cortex-M3内核的芯片基本都是这个过程):上电后,系统首先从0x0000 0000(映射到0x0800 0000,这里假设从内部Flash启动)处获得中断向量表,然后在运行用户代码之前,会在标签2处由一段引导代码将Flash中已经初始化的变量COPY到SRAM中对应的地址空间,然后将ZI区域全部清零,之后才正式运行用户代码。

你可能感兴趣的:(自学总结)