金刀峡自驾游路线:分散加载文件的应用

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 19:32:12

简单应用时可以不写.scf文件。而在"Output"页中选择"Simple".然后填写"RO Base"和"RW Base"的起始地址。在"Lay Out"页中,填写Object/Symble: Startup.o, Section: Start.编写启动文件:Startup.s.

 

在"Option"页里的"Image Entry Point"填入起始地址。

--------------------------------------------------------------------------------

 

Scatter-Load Description File的结构:

 

".scf"文件中的"+RW"对应".s"源文件中的"READWRITE".

".scf"文件中的"+ZI"对应".s"源文件中的"NOINIT".

".scf"文件中的"+RO"对应".s"源文件中的"READONLY".

 

在".s"源文件中有:

AREA area_name CODE/DATA,READONLY/NOINIT/READWRITE

END

 

 

".scf"的例子

 

内容   注解

ROM_LOAD 0x80000000

{   Name of Load Region, Start Address for Load Region and Maximum size of Load Region(省略了)

  ROM_EXEC 0x80000000 0x20000

{ 片外存储区,从0x80000000开始,最多0x20000字节。

  Startup.o(Vector,+First) Startup模块的Vector段放在最前面。注1

  *(+RO) 其他所有模块中的所有代码和只读的数据放在这里。

  }  

  IRAM 0x40000000 0x00004000

{ 片内RAM区,从0x40000000开始,最多0x4000字节

  Startup.o(MyStacks,+first) 指定Startup.o中MyStacks放在最前面。

  Startup.o(+RW,+ZI) Startup.o中的其他+RW/+ZI段。注1

  os_cpu_a.o(+RW,+ZI)  

  }  

  STACKS 0x40004000 UNINIT

{ 片内16K RAM的顶端,存放不需要被"C library"初始化的段。

  Stack.o(+ZI) 注2

  }  

  ERAM 0x80040000

{  

  *(+RW,+ZI)  

  }  

  HEAP +0 UNINIT

{ "+0"表示接着上一段"ERAM"的结尾,继续安排存储区。

  Heap.o(+ZI) 注3

  }  

}    

 

 

 

下面是在scf文件中引用过的源文件示意: "Startup.s"

code 32

area Vectors,CODE,READONLY

entry

...

end 注1:在"Startup.o"里面会生成名为"Vectors"的段,段的属性为"READONLY"

"Stack.s"

area Stacks, DATA, NOINIT

export StackUsr

StackUsr SPACE 1

end 注2: 在"Stack.o"里面会生成名为"Stacks"的段,段的属性为"NOINIT",该属性对应scf文件中的"+ZI". 该段不需要初始化或者可以被初始化为"0".

"Heap.s"

area Heap,DATA,NOINIT

export bottom_of_heap

bottom_of_heap SPACE 1

end 注3: "Heap.o"里面名为"Heap"的段。

 

 

在Scatter文件中最好每一个Region都加一个Maximum参数,这样当编译时如果实际使用的空间大于Maximum Size,会有Error:16220E: Excution region xxx size (xxx bytes) exceeds limit (xx bytes)。如果地址有重复,会有Error: 16221E: Excution region xxx overlaps with excution region xxx。前一个Region的首地址 + Maximum > 后一个Region的首地址时不一定有Error。只有当一分配的内存出现覆盖时才会有Error。

 

Region的"UNINIT"之类的参数要放在"Maximum size"参数之前。

 

本文来自:我爱研发网(52RD.com) - R&D大本营

详细出处:http://www.52rd.com/bbs/dispbbs.asp?boardid=118&id=70812&replyID=68709