您现在的位置: 主页 > 嵌入式相关 > 嵌入式软件开发之: 映像文件存储器映射调整
本文所属标签:
#嵌入式如何使用Base Address#   
为本文创立个标签吧:

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

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-07-10 

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文件的第一行加上需要编译器进行预处理的操作。语法格式如下所示。

#! [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



              查看评论 回复



嵌入式交流网主页 > 嵌入式相关 > 嵌入式软件开发之: 映像文件存储器映射调整
 使用 地址 重叠

"嵌入式软件开发之: 映像文件存储器映射调整"的相关文章

网站地图

围观()