ADS1.2 Scatter-Loading文件分析

1126阅读 0评论2009-07-11 enjoying-spring
分类:嵌入式

摘要:比较详尽的对ADS1.2 Scatter-Loading文件进行了说明。

ADS1.2 Scatter-Loading文件分析[转贴]

 

;总共三个分散加载文件mem_a.scfmem_b.scfmem_c.scf,区别是加载地址不一样

;具体加载哪个,在DebugInExram->ARM Linker->Scatter定义,链接类型选择Scattered

image entry point一定要跟ROM_LOAD值一样

ROM_LOAD 为加载区的名称,其后面的0x00000000 表示加载区的起始地址(存放程序代

;码的起始地址)

ROM_LOAD 0x0

{

ROM_EXEC 描述了执行区的地址,放在第一块位置定义

    ROM_EXEC 0x00000000

    {

;从起始地址开始放置向量表(Startup.o(vectors, +First),其中Startup.o Startup.s 的目

;标文件)

+First表示Vector段放在最前面

        Startup.o (vectors, +First)

;接着放置其它代码(* (+RO))* 是通配符,类似WINDOW下搜索用的通配符

        * (+RO)

    }

;变量区IRAM 的起始地址为0x40000000

    IRAM 0x40000000

    {

;放置Startup.o (MyStacks)

        Startup.o (MyStacks)

    }

+0表示接着上一段,UNINIT 表示不初始化

    STACKS_BOTTOM +0 UNINIT      

    {

;放置AREA    StackBottom, DATA, NOINIT

        Startup.o (StackBottom)

    }

;接着从0x40004000 开始,放置 AREA    Stacks, DATA, NOINITUNINIT 表示不初始化

    STACKS 0x40004000 UNINIT

    {

        Startup.o (Stacks)

    }

;外部RAM0x80000000开始为变量区

;如果片外RAM起始地址不为0x8000 0000,则需要修改mem_.scf文件

    ERAM 0x80000000

    {

        * (+RW,+ZI)

    }

+0表示接着上一段,UNINIT 表示不初始化

    HEAP +0 UNINIT

    {

;放置堆底, AREA    Heap, DATA, NOINIT

        Startup.o (Heap)

    }

;接着在外部0x80080000 放置堆顶

;这个地址是片外RAM 的结束地址,根据实际情况修改

    HEAP_BOTTOM 0x80080000 UNINIT

    {

        Startup.o (HeapTop)

    }

}

;重定向__user_initial_stackheap 函数

;分配新的bottom_of_heap地址等,R0-R3是函数必须的返回值,返回bottom_of_heap

;值

;通过分散加载描述文件,重定向其位置,bottom_of_heap等已经在Startup.s中定义为DATA

;类型

 

__user_initial_stackheap   

    LDR   r0,=bottom_of_heap

;    LDR   r1,=StackUsr

    LDR   r2,=top_of_heap

    LDR   r3,=bottom_of_Stacks

    MOV   pc,lr

上一篇:没有了
下一篇:PCI转并口SJF配置全过程