您的位置:首页 > 编程语言

MDK启动代码__main(),__rt_entry()分析

2012-06-09 18:25 761 查看
详细可参考http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0206ic/Chdcgbjd.html
 Realview 编译工具开发指南.pdf  【第三章】

 

__main()时编译系统提供的一个函数,它通过调用__Scatter-load函数,把RW/RO输出段从装载域地址复制到运行域地址,并完成了ZI运行域的初始化工作。

__rt_entry()完成库函数的初始化,如果采用分散装载技术,还必须实现__user_initial_stackheap

函数,重新定义堆栈和堆空间,最后自动跳转向main()函数。

       通过调用__main(),让系统自动完成装载域到运行域的数据复制和库函数调用的初始化

       如果所有初始化步骤想自己显式的完成,则可以跳过__main(),把main()改成Main().

__rt_entry()里面就是设置堆栈的工作,MDK会调用到对堆栈进行设置的函数启动代码_main,后面的代码就是对此函数的定义,调用则由MDK自动实现,只要定义好就可以了。

; 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息