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