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自动实现,只要定义好就可以了。
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
相关文章推荐
- MDK __main()代码执行分析
- ARM9代码分析启动MAIN.C
- 基于TQ2440的ARM启动代码注释分析(基于MDK)
- MDK S3C2440启动代码简单分析
- MDK __main()代码执行过程分析
- VxWorks启动代码usrInit ()函数分析
- DSS 代码分析【启动、初始化流程】
- U-Boot启动代码分析(MIPS)
- u-boot_smdkv210 分析二:启动代码start.s分析
- hostapd的radius/eap server代码分析(4)-在windows下启动hostapd的radius/eap server
- linux 2.6源代码情景分析笔记之系统启动2
- cortex A8处理器启动分析一引导代码BL0
- mini2440启动代码分析之第二篇(着重理解$HandlerLabel HANDLER $HandleLabel宏)
- arm启动代码分析(转)
- 关于从NAND Flash启动的问题,2440 启动问题 , 拷贝4k程序 ,启动代码分析
- STM32 启动代码发分析
- u-boot源码分析 --- 启动第二阶段 ,基于2410 启动代码 分析
- STM32 keil mdk启动代码发分析 .
- 从零入手Kinetis系统开发(四)之启动代码分析
- spice server qxl red_worker_main()代码分析