chxgzl4862 发表于 2008-6-6 13:08:02

ARM启动文件请教

我刚刚看到那个LPC22XX的工程摸板,里面有几个后缀名为.scf的文件
我也看了是对应的加载位置,但是mem_a.scf是对应的FLASH.RAM.还是片外的,能不能分别说明下,还有我看了语句Startup.o(MyStacks),这个是个什么啊!函数还是,这个起什么作用,希望得到清楚明白的回答,谢谢!

zllfdd 发表于 2008-6-6 19:09:08

帅哥哥,你贴一些代码呀。我从来没见过你说的那个Startup.o。

chxgzl4862 发表于 2008-6-6 20:52:21

;********************************************************************************************************/
ROM_LOAD 0x0
{
    ROM_EXEC 0x00000000
    {
      Startup.o (vectors, +First)
      * (+RO)
    }

    IRAM 0x40000000
    {
      Startup.o (MyStacks)
    }

    STACKS_BOTTOM +0 UNINIT
    {
      Startup.o (StackBottom)
    }

    STACKS 0x40004000 UNINIT
    {
      Startup.o (Stacks)
    }

    ERAM 0x80000000
    {
      * (+RW,+ZI)
    }

    HEAP +0 UNINIT
    {
      Startup.o (Heap)
    }

    HEAP_BOTTOM 0x80080000 UNINIT
    {
      Startup.o (HeapTop)
    }
}


呵呵,就是上面的!

zllfdd 发表于 2008-6-6 21:02:31

这是链接脚本,我也就明白这些了,帮顶。

chxgzl4862 发表于 2008-6-10 08:50:00

呵呵!感谢!

shmily 发表于 2008-6-10 09:00:20

建议你看一下zlg的深入浅出arm7,里面有详细介绍

starli 发表于 2008-6-10 09:24:55

传说中这个叫 分散加载文件

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, NOINIT,UNINIT 表示不初始化
    STACKS 0x40004000 UNINIT
    {
      Startup.o (Stacks)
    };外部RAM从0x80000000开始为变量区

;如果片外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


--------------------------------------------------------------------------------------------
我摘自网上,自己没深入研究过

刚开始的时候我也是想从底层一直搞到顶层的, 后来发现这有点行不通

只需要知道改哪里就可以了。

chxgzl4862 发表于 2008-6-10 12:48:46

谢谢,非常感谢!

NewKing 发表于 2014-2-11 15:37:23

启动文件,纠结!
页: [1]
查看完整版本: ARM启动文件请教