Keil中sct分散加载文件学习

1.什么是分散加载文件?

分散加载文件是一个文本文件,通过编写一个分散加载文件来指定ARM连接器在生成映像文件时如何分配RO/RW/ZI等数据的存放地址。如果不用SCATTER文件指定,那么ARM连接器会按照默认的方式来生成映像文件,一般情况下我们是不需要使用分散加载文件的。
分散加载区域分为两类:
加载区:该映像文件开始运行前存放的区域,即当系统启动或加载时应用程序存放的区域。
执行区:映像文件运行时的区域,即系统启动后,应用程序进行执行和数据访问的存储器区域,系统在实时运行是可以有一个或多个执行块。

2.分散加载文件的作用是什么?

在某些场合,我们希望把某些数据放在指定的地址处,那么这时候SCATTER文件就发挥了非常大的作用。而且SCATTER文件用起来也非常好用。
举个例子:比如像LPC2387芯片具有多个不连续的SRAM,通用的RAM是32KB,可是32KB不够用,我想把某个.c中的RW数据放在USB中的SRAM中,那么就可以通过SCATTER文件来完成这个功能。

3.分散加载文件如何使用?

1.分散加载文件的语法
load_region_name start_address | "+"offset [attributes] [max_size] { execution_region_name start_address | "+"offset [attributes][max_size] { module_select_pattern ["(" ("+" input_section_attr | input_section_pattern) ([","] "+" input_section_attr | "," input_section_pattern)) * ")"] } }
**load_region:**加载区,用来保存永久性数据(程序和只读变量)的区域。
**execution_region:**执行区,程序执行时,从加载区域将数据复制到相应执行区后才能被正确执行。
**load_region_name:**加载区域名,用于“Linker”区别不同的加载区域,最多31个字符。
**start_address:**起始地址,指示区域的首地址。
**+offset:**前一个加载区域尾地址+offset 做为当前的起始地址,且“offset”应为“0”或“4”的倍数。
**attributes:**区域属性,可设置如下属性。

  • PI 与地址无关方式存放;
  • RELOC 重新部署,保留定位信息,以便重新定位该段到新的执行区;
  • OVERLAY 覆盖,允许多个可执行区域在同一个地址,ADS不支持;
  • ABSOLUTE 绝对地址(默认);

**max_size:**该区域的大小。
**execution_region_name:**执行区域名。
**start_address:**该执行区的首地址,必须字对齐。
**+offset:**同上。
**attributes:**同上。

  • PI 与地址无关,该区域的代码可任意移动后执行;
  • OVERLAY 覆盖;
  • ABSOLUTE 绝对地址(默认);
  • FIXED 固定地址;
  • UNINIT 不用初始化该区域的ZI段;

**module_select_pattern:**目标文件滤波器,支持通配符“*”和“?”。

  • .o匹配所有目标, (或“.ANY”)匹配所有目标文件和库。

**input_section_attr:**每个input_section_attr必须跟随在“+”后;且大小写不敏感。

  • RO-CODE 或 CODE
  • RO-DATA 或 CONST
  • RO或TEXT, selects both RO-CODE and RO-DATA
  • RW-DATA
  • RW-CODE
  • RW 或 DATA, selects both RW-CODE and RW-DATA
  • ZI 或 BSS
  • ENTRY, that is a section containing an ENTRY point.
  • FIRST,用于指定存放在一个执行区域的第一个或最后一个区域;
  • LAST,同上;

**input_section_pattern:*段名。
汇编中指定段:
AREA vectors, CODE, READONLY
C中指定段:
#pragma arm section [sort_type[[=]“name”]] [,sort_type=“name”]

sort_type: code、rwdata、rodata、zidata
如果“sort_type”指定了但没有指定“name”,那么之前的修改的段名将被恢复成默认值。
#pragma arm section// 恢复所有段名为默认设置。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值