微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Andes 的分散聚合(SAG)机制

Andes 的分散聚合(SAG)机制

时间:09-22 来源:电子产品世界 点击:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top