什么是分散加载
单片机和电脑一样具有,存储镜像和运行镜像。生成的bin文件下载到flash里面,然后根据连接脚本加载到指定的地方运行。通常情况下代码段都是放在rom中运行的,而数据段是放在ram中运行的。有时候为了提高效率或是其他目的,放在rom中的部分代码需要在ram中跑,下载的地址和运行的地址不同。这就是分散加载最常见的使用方式。
不只是代码段,分散加载机制可以将内存变量,定位于不同物理地址上。
将存储镜像里的代码,根据链接文件.scf加载到不同的地方,是由rom内置的代码来做的,不需要用户关心,只需要写好链接文件。cpu系统复位或上电之后,自己会做好。
分散加载知识
程序基本概念
code:程序代码段
ro-data:常量及只读类型数据
rw-data:已经初始化的静态变量,全局变量
zi-data:未初始化的静态变量
ROM size = code + ro-data + rw-data
RAM size = rw-data + zi-data
注:rw-data首先被下载到flash,之后需要加载到ram中运行,下载地址和运行地址不同,因此既占用flash空间,也占用ram空间。zi-data又叫bss段不同,它因为没有初始值,可以直接在ram中生成,不占用rom空间,也就是说存储镜像里没有bss段。
分散加载语法
第一个运行时域的基址必须与加载域基址相同
多flash的情况下,每个flash都定义一个加载域
语法:
目标文件过滤器,* 代表0个或多个字符,进行匹配时不区分大小写
属性选择器,+,如果指定一个模式以匹配输入段名称,前面需要+
.ANY表示随意分配,大部分情况下可以代替*
|