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

在这里插入图片描述
以第一道程序的分散加载空间为例,说明一下内部语句的含义。

在此之前,先讲解一下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的空间分配。
在这里插入图片描述
结合上图说明STM32F407ZGT6的启动过程(采用Cortex-M4、Cortex-M3内核的芯片基本都是这个过程):上电后,系统首先从0x0000 0000(映射到0x0800 0000,这里假设从内部Flash启动)处获得中断向量表,然后在运行用户代码之前,会在标签2处由一段引导代码将Flash中已经初始化的变量COPY到SRAM中对应的地址空间,然后将ZI区域全部清零,之后才正式运行用户代码。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值