当前位置: 代码迷 >> 单片机 >> MDK也许ADS里_user_initial_stackheap函数的作用
  详细解决方案

MDK也许ADS里_user_initial_stackheap函数的作用

热度:58   发布时间:2016-04-28 15:44:10.0
MDK或者ADS里_user_initial_stackheap函数的作用
MDK里,最后一段:
; Enter User Mode and set its Stack Pointer //用户模式的栈已经定义好了
  MSR CPSR_c, #Mode_USR
  MOV SP, R0
  SUB SL, SP, #USR_Stack_Size


; Enter the C code
;
  IMPORT __main
  LDR R0, =__main
  BX R0


; 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


  END
__user_initial_stackheap
这个函数说是自动被调用的,我们已经设置好了用户的栈,为何要加呢,我再往上看了些,不是很懂,太抽象,能给直观的讲讲吗?谢谢。能通俗易懂就好了,呵呵
我理解就是:进入_main后,系统库函数会自动调用这个函数,但是用来干啥的呢?RO- R3就是那个库函数的参数,实际上是库函数调用了__user_initial_stackheap后只是将几个参数放入寄存器,返回后,库函数继续利用RO-R3的值再进一步处理,可是处理的是什么呢,有人说是库函数堆栈的初始化,但是初始化堆栈前面不是已经初始化完了吗?求指教。

------解决方案--------------------
请参照:
《RealView® 编译工具4.0 版 库和浮点支持指南》
在ARM官网上可以直接下载,里面说的比较清楚

这部分内容在2.10
  相关解决方案