详细可参考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
