`
yidongkaifa
  • 浏览: 4038760 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics