新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式软件开发之: 映像文件存储器映射调整

嵌入式软件开发之: 映像文件存储器映射调整

作者:时间:2013-09-30来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257027.htm

3.在代码映像中保留空白域

可以在Scatter中使用 EMPTY 属性为栈保留一个空白存储器块。该存储块不构成载入区的一部分,但指定在执行时使用。由于它创建为虚 ZI区,所以 armlink 使用以下符号访问它:

· Image$$region_name$$ZI$$Base;

· Image$$region_name$$ZI$$Limit;

· Image$$region_name$$ZI$$Length。

如果指定的长度为负值,则Image$$region_name$$ZI$$Limit被视为域的结束地址。它是绝对地址,不是相对地址。下面例子显示了如何在Scatter文件中预留一个空白区域。

LOADREGION 0x700000 ; 加载域的起始地址在0x700000

{ ;

STACK 0x7000000 EMPTY –0x10000 ; 该域的结束地址为0x700000,因为其长度为负

;

region

;

{

; 预留空白区放置栈

}

HEAP +0 EMPTY 0x10000 ; 栈的起始地址在上个预留区域介绍地址

;

;

{

; 预留空白区域放置堆

}

; rest of scatter description...

}

在上面的例子中定义了一个执行域STACK 0x7000000 EMPTY -0x10000,它从地址 (0x7000000-0x1000)开始,在地址0x7000000结束。

在此示例中,链接程序生成符号:

Image$$STACK$$ZI$$Base = 0x6ff0000

Image$$STACK$$ZI$$Limit = 0x7000000

Image$$STACK$$ZI$$Length = 0x1000

Image$$HEAP$$ZI$$Base = 0x7000000

Image$$HEAP$$ZI$$Limit = 0x7010000

Image$$HEAP$$ZI$$Length = 0x1000

EMPTY属性仅适用于执行区。如果在载入区定义中使用EMPTY属性,则链接程序生成警告信息并忽略该属性。链接程序检查用于EMPTY区的地址空间不与任何其他执行区重叠。

4.使用OVERLAY关键字

在ARM以前的编译器中,没有提供地址空间的重叠管理。如果有运行时域地址空间重叠,需要用户自己提供地址空间重叠的管理机制。但在RVDS的编译器中,提供了运行时域属性关键字OVERLAY,用户可以使用该关键字生成自己的重叠空间。

下面例子显示了如何使用OVERLAY关键字,生成运行时域的重叠空间。

LOADREG 0x8000

{

;

STATIC_RAM 0x0 ; 静态RAM区,包含大部分的RW和ZI

{

* (+RW,+ZI)

}

OVERLAY_A_RAM 0x1000 OVERLAY ; 重叠区...

{

module1.o (+RW,+ZI)

}

OVERLAY_B_RAM 0x1000 OVERLAY

{

module2.o (+RW,+ZI)

}

;

}

5.在Scatter文件中使用预处理伪操作

可用在Scatter文件的第一行加上需要编译器进行预处理的操作。语法格式如下所示。

#! preprocessor> [pre_processor_flags]

LOAD_FLASH ( 0x8000 + ( 0x2 * 0x400 )) ;

例如:

#! armcc -E

联接器可以对预处理的表达式进行简单的计算,可以识别简单的运算符如+、-、×、/、AND和OR,如:

#define AN_ADDRESS (BASE_ADDRESS+(ALIAS_NUMBER*ALIAS_SIZE))

同时,也可以在Scatter文件头加一些预处理的伪操作,如:

#define ADDRESS 0x20000000

#include include_file_1.h

#define BASE_ADDRESS 0x8000

#define ALIAS_NUMBER 0x2

#define ALIAS_SIZE 0x400

在Scatter文件中,使用预处理的更详细的信息,请参见ARM相关文件。

存储器相关文章:存储器原理




评论


相关推荐

技术专区

关闭