Andes 的分散聚合(SAG)机制
2.5 Input Section(输入段)
Input Section的描述格式为:
此处:
module_select_pattern 可以是目标文件名
input_attr 可以是KEEP,该属性可以保证该section在链接时不会被remove掉,或者是SORT,用于排序。
例子如:
program1.o KEEP(+RO)
此时该input section将包含目标文件program1.o中所有的read-only section,由于加了KEEP,所以所添加的section在链接的时候不会被gc-section删除掉。
input_section_selector中最常用的是input section_attr。
input section_attr有以下几种:
input_section_selector中另外一种用的是input_section_pattern,
它的表示方法是 input_section_pattern ::= (.text | .data|…)。
ADDR variable 用于得到该处的VMA赋给variable。
LOADADDR variable 用于得到该处的LMA赋给variable。
STACK "=" num 为sp准备一个初始值num。
VAR 用于设定并初始化一个变量。如VAR _ILM_BASE = 0x00600000。
2.6 Execution Overlay Region(overlay的执行区)
当使用overlay功能时,需要设定Execution Overlay Region,设定格式为:
它在后面加了个:OVERLAY的关键字。
pagesize后面表示Overlay的大小,当是0时,表示software Overlay,其它的设置和前面的execution region相同。
2.7 Overlay Input Section(overlay的输入段)
当使用overlay功能时,要设置Overlay Input Section,它和前面的Input Section类似。
3.例子
如下例子所示的效果是:
在一个系统中,从0x0000开始,大小为0x2000的是ROM1, 从0x4000开始,大小为0x8000的是ROM2,此时我们需要将目标文件program1.o的RO和RW,ZI data。 存放在ROM1中,将其它目标文件的 .text,RO,RW, ZI存放在ROM2中。此时的LMA效果对应于下图的左侧。
同时需要将目标文件program1.o中的RW, ZI的运行地址设置在从0x10000开始的大小为0x8000的DRAM上,将其它目标文件的RW,ZI的运行地址设置在从0x18000开始,大小为0x8000的SRAM上。此时的VMA效果对应于下图的右侧。
该例子中program1.o中的RO和其它目标文件中的.text, RO的LMA和VMA是相等的,此时所有的RW,ZI的加载区域是分别在ROM1和ROM2上,但是运行地址是分别在DRAM和SRAM上,所以RW,ZI的LMA不等于VMA,所以在程序使用到RW, ZI所代表的.data,.bss段之前需要将它们从加载区复制到运行区,以达到所图中右侧所示的效果。
对应的SAG可以这样设计:
利用SAG机制,除了快速设计上列所示的系统中存储的分配机制,还可以快速的进行overlay程序的设计,overlay程序主要是用于分时重复利用快速但存储空间有限的存储器。
关于如何在Andes上进行overlay程序的编写,请参考我们另外一篇文档:http://www.andestech.com/cn/news-events/technical-article/2013/2013-12-04.pdf
4、将SAG文件转化成linker script
在AndeSight 或者BSP package中提供了叫做nds_ldsag的工具,该工具可以将SAG文件转化成标准的GUN link script文件。在cygwin下,执行方法如下,filename.ld就是我们希望获得的link script文件。
./nds_ldsag.exe filename.sag -o filename.ld
5、结语
Andes提供的通俗、易用的SAG描述语言,可以帮助工程师根据系统中的存储设备的特点,对程序的加载与运行区域进行很方便的设计和描述,甚至可以快速的进行更为复杂的overlay程序的设计,然后通过自动化工具nds_ldsag将SAG描述文件转成标准link脚本供连接器使用,从而大大提高在Andes core平台上的软件开发效率。
参考文档:
1: BSP321 programming guide link generator
2: The GNU Linker Manual
- EDM安全访问机制应用方案(02-12)
- 在晶心平台运行具 OSC 的 FreeRTOS(01-08)
- 8051 与 AndesCoreTM 的软件差异与移植(07-29)
- Andes SAG应用实例(12-04)
- 单片机POCSAG码检错及纠错(06-26)