STC分散文件加载

一、什么是分散加载文件?

        分散加载文件通常以.sct结尾,英文名是:Linker Control File, scatter loading,链接器根据这个文件的配置来分配各个节区的地址空间,并且生成分散加载代码,因此我们只要修改分散加载文件,链接器就能自动帮我们确定代码、变量等这些内容在内存中(Flash和RAM上)的地址。

二、分散加载文件在什么时候起作用?

        它主要是在链接阶段产生作用,如果你之前用过gcc+makefile编译mcu项目,那可以看到在目录中会有.ld结尾的文件,这个文件和我们这里的分散加载文件作用类似,都是在链接阶段起作用。

编译链接流程

0e8ad79827924f9e837d2edd12581879.png

三、一般在哪里可以找到sct文件?

aed4849a401c416caec60d5d0c45c75a.png

四、分散加载文件的格式

423a4906b9014459b64cd305581194d7.png

加载域名 起始地址 大小{: 加载区域大小 (分号后面是注释)
        运行域名 起始地址 大小  : 执行地址
        {
                中断向量表起始地址, +First表示强制放到首地址
                
                ARM相关库,InRoot$$Sections即ARM库的链接器标号,主要作用COPY RW到RAM,
                然后在RW区后面创建ZI区域。 库函数__main函数中有这个段。 它是__main()的一部分。
                
                编译文件RO只读在该区域
        }
        运行内存名字 起始地址 大小
        {
                        编译可读可写,静态区
        }
}

五、STC分散加载具体实现

  • 创建一个.stc文件

在MDK文件夹中找到和工程同名文件夹创建一个自己的.stc文件

dadabf0549d343dba90bf981e55bcf9b.png

  • Keil的配置

0614abdd0b3b4942a4f9890fa6242b80.png

  • 编辑.stc文件

d203bcffe9ad4638a4f6440a8b823f84.png

  • 编写测试代码

attribute ((used, section ("myram"))) 的意思是:

  • 即使函数没有被直接调用,也要保留它。

  • 将这个函数放置到名为 myram 的内存段中。

这种用法通常用于嵌入式系统编程中,特别是在需要将某些函数或数据放置到特定的内存区域时。

0d1fe8f2a4ee4945b3708c9da029e591.png

58c6bf2db1b44af7aace4eb4d8d1ccd6.png

  • 验证

在map文件可以看到这些函数在内存中位置

0d40e0e30926433da297146634395973.png

  • 实验效果

07d8f02e38674aea8194c2b51fece3c9.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值