复位到main函数

; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP

 

复位之后 先SystemInit然后 再执行_main函数 

进入__main后,先后调用的两个函数是__scatterload_rt2_thumb_only 和__rt_entry_sh。

跳到__user_initial_stackheap是为了获取有关堆栈的地址信息:

 

.总的来说,从上电到main函数之前,编译器为我们把RW段从加载域搬运到运行域,清零ZI段;设置好堆栈指针,初始化C库要用的的一些内存空间,设置浮点数状态字,做好一切初始化工作之后就跳到main函数执行,看来main函数前还是有很多活要干的,不是原来所想像的main就是C语言的入口这么简单。

一个ARM程序包含3部分:RO,RW和ZI
            RO是程序中的指令和常量
            RW是程序中的已初始化变量
            ZI是程序中的未初始化的变量


            由以上3点说明可以理解为:
            RO就是readonly,
            RW就是read/write,
            ZI就是zero

这篇说的比较详细:
https://blog.csdn.net/whiteshark1991/article/details/6635296?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值