MDK程序下载到flash-分散加载文件scatter

我是通过这搞懂的
下面是我觉得值得注意得

一.散加载文件基本点
1. 编译后输出的映像文件.bin中各段是首尾相连的,中间没有空闲的区域,他们的先后关系是根据链接时参数的先后次序决定的armlinker -file1.o file2.o …
  1. scatter用于将编译后的映像文件中的特定段加载到多个分散的指定内存区域有两类域(region):执行域和加载域
  2. 加载域:就是编译之后得到的二进制文件烧写到rom中的这一段区域,所有的代码R0、预定义变量RW、堆栈之类和清不清空无关紧要的大片内存区域ZI,都包括在其中
  3. 执行域:就是把加载域进行“解压缩”后的样子。比如:RO没有变动还是在ROM中,RW被移到了SRAM中,而ZI被放置在SDRAM中
5. scatter本身并不能对映像实现“解压缩”,编译器读入scatter文件之后会根据其中的各种地址生成启动代码了,实现对映像的加载,而这一段代码就是*(InRoot$$Sections)它是__main()的一部分。这就是在汇编启动代码的最后跳转到__main()而不是跳向main()的原因之一
  1. 起始地址与加载域重合的执行域称为root region,(InRoot Sections),所以如果在root region中用到了(+RO)可以不再指定*(InRoot$$Sections)。
  2. 程序正确编译生成目标文件以后,就会链接成可执行的文件,这个过程中,要用到分散加载文件,它决定可执行代码在存储器中存放的位置,这在复杂的程序(例如VIVI读Linux内核的引导)中时很重要的
二.所以.sct最后的体现是变成启动代码的一部分——*(InRoot$$Sections)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值