分散加载(6)---根域root region

一、根域的概念

在分散加载文件中,我们必须定义一个这样的执行域:这个执行域的开始地址必须等于它所在的加载域的开始地址,并且在这个执行域中,必须包含整个程序(也称镜像文件)的入口点(entry point),说白了就是我们常用的启动文件***.S,在这个文件中包含了RESET段,C语言入口函数_main(). 这样的一个执行域,称作根域;

必须定义根域,必须把入口点放在根域中,否则连接器报错。

举例说明:我们在cortex M核的MCU/SOC的分散加载文件中,都可以看到这样的内容,其中,RESET就是程序入口,InRoot$$Sections就是_main()包括的函数段。如图:

分散加载(6)---根域root region_第1张图片 

 

二、定义根域的方法

1)方法一:使用绝对物理地址创建根域,如图:

 

 

加载域开始地址 = 执行域开始地址 = 0x8000000.

2)方法二:使用偏移量+0创建根域,如图:

分散加载(6)---根域root region_第2张图片 

 

  

注意:使用偏移量 +0 的方式定义根域,有一个特别需要注意的地方,就是后面的执行域都视作根域,但是包含ZI数据的执行域除外。原话是这样的:If you specify an offset of zero (+0) for all subsequent execution regions in the load region, then all execution regions not following an execution region containing ZI are also root regions.

比如:

分散加载(6)---根域root region_第3张图片 

 

3)方法三:使用执行域属性FIXED创建根域,如图:

分散加载(6)---根域root region_第4张图片 

 

注意:使用属性FIXED,要注意固定的地址,不要超出他所在范围的加载域空间,否则,没有意义。如图:

分散加载(6)---根域root region_第5张图片 

 

你可能感兴趣的:(SCATTER,FILE,单片机,物联网)