一、什么是分散加载文件?
分散加载文件通常以.sct结尾,英文名是:Linker Control File, scatter loading,链接器根据这个文件的配置来分配各个节区的地址空间,并且生成分散加载代码,因此我们只要修改分散加载文件,链接器就能自动帮我们确定代码、变量等这些内容在内存中(Flash和RAM上)的地址。
二、分散加载文件在什么时候起作用?
它主要是在链接阶段产生作用,如果你之前用过gcc+makefile编译mcu项目,那可以看到在目录中会有.ld结尾的文件,这个文件和我们这里的分散加载文件作用类似,都是在链接阶段起作用。
编译链接流程
三、一般在哪里可以找到sct文件?
四、分散加载文件的格式
加载域名 起始地址 大小{: 加载区域大小 (分号后面是注释)
运行域名 起始地址 大小 : 执行地址
{
中断向量表起始地址, +First表示强制放到首地址
ARM相关库,InRoot$$Sections即ARM库的链接器标号,主要作用COPY RW到RAM,
然后在RW区后面创建ZI区域。 库函数__main函数中有这个段。 它是__main()的一部分。
编译文件RO只读在该区域
}
运行内存名字 起始地址 大小
{
编译可读可写,静态区
}
}
五、STC分散加载具体实现
-
创建一个.stc文件
在MDK文件夹中找到和工程同名文件夹创建一个自己的.stc文件
-
Keil的配置
-
编辑.stc文件
-
编写测试代码
attribute ((used, section ("myram")))
的意思是:
-
即使函数没有被直接调用,也要保留它。
-
将这个函数放置到名为
myram
的内存段中。
这种用法通常用于嵌入式系统编程中,特别是在需要将某些函数或数据放置到特定的内存区域时。
-
验证
在map文件可以看到这些函数在内存中位置
-
实验效果