打印

ARM启动代码疑惑!

[复制链接]
1788|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2010-12-10 11:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
; User Initial Stack & Heap
                AREA    |.text|, CODE, READONLY
                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap
                LDR     R0, =  Heap_Mem
                LDR     R1, =(Stack_Mem + USR_Stack_Size)
                LDR     R2, = (Heap_Mem +      Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR
                ENDIF

                END
上面是用户初始化堆和栈的代码,有点看不同,这段段代码是在B _main之后,在c的后面,不过在单步调试时,可以看到C中的main函数后面编译器给自动加上有些其他的代码,不知道上面的代码是在什么时候被执行,还有给R0,R1,R2,R3堆和栈的地址有什么用呢??????

相关帖子

沙发
xinzha| | 2010-12-10 15:55 | 只看该作者
供ARM本身提供的库函数调用,做堆栈的初始化等工作,至于寄存器赋值那就是一套完整的ARM规则了,ATPCS

使用特权

评论回复
板凳
areshan|  楼主 | 2010-12-10 16:21 | 只看该作者
我想知道堆栈的初始话都做了些什么!!!!!!!堆和栈的大小,地址在配置中都有了,初始化是给他么空间清0??????ro,r1,r2,r3,是atpcs的规则:函数用ro,r1,r2,r3传递参数,如果参数大于4个要用栈来传递!
谢谢你的回复!!!!!!

使用特权

评论回复
地板
xinzha| | 2010-12-11 08:26 | 只看该作者
你知道了cpu并不一定知道,而且堆是一个概念,需要软件来维护。清零是必须的。

使用特权

评论回复
5
senioryzc| | 2010-12-11 11:55 | 只看该作者
c库里面有个malloc函数,当你的代码调用他的时候,他去哪里分配内置呢
显然必须在系统初始化的时候,你告诉它一块内存
stack同样的道理,你的C函数要运行,必须要有个栈,也是你必须告诉它的

如果你在用单步,那么B _main之后每步都单步,你就能找到调用的地方

使用特权

评论回复
6
armmage| | 2010-12-12 19:33 | 只看该作者
你用的是LPC的ARM吧  我还是喜欢三星的ARM启动代码 少用那些库函数 自己搞初始化

使用特权

评论回复
7
areshan|  楼主 | 2010-12-13 08:26 | 只看该作者
谢谢上面的回复!

使用特权

评论回复
8
20070936| | 2010-12-14 11:05 | 只看该作者
堆栈的作用
   在ARM处理器中通常将R13作为堆栈寄存器(SP),用于保存堆栈的出入口地址。ARM一共有6个堆栈寄存器,其中用户模式和系统模式共用一个,每种异常模式都有专门的寄存器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝