MDK或者ADS里_user_initial_stackheap函数的作用

herostarone 2011-01-04 12:52:43
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的值再进一步处理,可是处理的是什么呢,有人说是库函数堆栈的初始化,但是初始化堆栈前面不是已经初始化完了吗?求指教。
...全文
598 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
riyueshuangjian 2012-10-29
  • 打赏
  • 举报
回复
顶上楼!呵呵!
acm111mca 2011-01-14
  • 打赏
  • 举报
回复
请参照:
《RealView® 编译工具4.0 版 库和浮点支持指南》
在ARM官网上可以直接下载,里面说的比较清楚

这部分内容在2.10
herostarone 2011-01-06
  • 打赏
  • 举报
回复
这个函数说是自动被调用的,我们已经设置好了用户的栈,为何要加呢"

但从初始化stack来讲,是有点多余,但是加了也不会错,只是初始化了两遍。
而且heap确实需要这个函数来初始化。

对吗
herostarone 2011-01-04
  • 打赏
  • 举报
回复
谁给讲讲哈

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧