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

Andes 的分散聚合(SAG)机制

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

Andes 的分散聚合(SAG)机制

在嵌入式系统设计中,通常使用不同的存储器,如Flash、SRAM、SDRAM,并位于不同的物理地址空间,怎样更好地利用这些不同的存储器并让系统高效地运行呢?通常这需要复杂的link script来管理实现,而Andes提供了分散聚合(SAG, Scattering-And-Gathering)机制,SAG机制能够将加载和运行时存储器中的代码和数据描述在一个SAG格式的文本描述文件中,并通过link generator tool将SAG文件转化为标准GNU的link script文件,以供链接时使用。采用Andes的分散聚合机制,不仅可以帮助工程师清晰的描述存储器的使用情况,更可以避免使用复杂的标准linker脚本语言 。本文详细介绍了SAG语法格式,并以实际工程为例,阐述SAG的使用方法和益处。

1.Andes ELF 的目标文件的构成

Andes使用标准的GNU link script格式,Andes的目标文件也遵行标准的ELF(Executable and Linking Format)格式。

ELF目标文件主要由 .text段 .data段 .bss段,还有一些其它的段如:.debug .comment段。

下面以一个简单的link script的例子作为说明:

  

SECTIONS是link script语法中的关键command,它用来描述输出文件的内存布局。例如上例中就含.text, .data, .bss三个部分。

.=0x10000; 其中的.是location counter(LC)。表示.text段虚拟地址从0x10000开始的。

AT用来说明加载地址,AT(0)表示.text段的加载地址是0。{ *(.text) },这个表示输出文件的.text段内容由所有输入文件()的.text段组成。后面的一个. = 0x40000。如果没有这个赋值,那么LC应该等于0x10000+sizeof(text段),这里强制指定LC=0x40000.表明后面的.data段的虚拟地址从0x40000开始。

LOADADDR用来得到加载地址,此处.data段的加载地址是AT(LOADADDR (.text) + SIZEOF (.text)),它紧接着.text段,.data为所有输入目标文件的.data段构成。同理,.bss段的虚拟地址是紧接着.data段虚拟地址之后,而加载地址是紧接着.data段加载地址之后的。.bss段由所有输入目标文件的.bss段组成。

通常在实际使用中的link script会更加的复杂,SAG机制能够很好的简化link script的设计,那接下来将对SAG机制作介绍。

2.Andes SAG语法

SAG使用巴科斯范式(BNF notation)中的以下几种符号表示:

  

  SAG 格式总览

SAG语法格式由:load regions,execution regions,input sections等几部分组成,如下图所示:

  

2.1 关于LMA和VMA

一般在嵌入式系统中,程序存储和运行在不同的地址空间,LMA表示的是程序装载地址,VMA表示的是程序运行地址,LMA不等于VMA时程序在加载后不可直接运行,程序运行前,要把程序的内容,拷贝到对应的内存地址处,才能正确地运行。

2.2 header格式

  

当要使用用户自定义的section时,须要使用USER_SECTIONS这个关键字。

2.3 Load Region(加载区)

Load Region格式为:

  

load_region_name用来表示某个程序加载区的名称。

address表示的是LMA。

offset表示的是偏移量,当此时是第一个load region时表示的是与0地址的偏移量,当表示的不是第一个load region时,表示的是与前一个load region结尾处的偏移量。

load_attr 表示属性,现在可以设置为ALIGN alignment, 如ALIGN 0x4

max_size 表示该加载区域的最大值。

例子:

LOAD_ROM_1 0x0000 ALIGN 0x4 0x10000

在这个例子中load_region_name是:LOAD_ROM_1,LMA是0x0000,以4-byte对齐,

max_size是64k

2.4 Execution Region(执行区)

Execution Region格式为:

  

exe_region_name 用于表示某个程序执行区的名称

address表示的是VMA。

offset当表示的是第一个execution region,表示的是与该加载区的偏移量,当表示的不是第一execution region时,offset表示的是前一个execution region结尾处的偏移量。

exe_attr表示属性,如可以设置为ALIGN alignment,如ALIGN 0x4

max_size表示该execution region的最大值。

例子:

EXEC_ROM_1 0x0000 ALIGN 0x4 0x8000

在这个例子中exe_region_name是EXEC_ROM_1,它的VMA是0x0000, 以4-byte对齐,max_size是32k

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

网站地图

Top