这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请教__user_initial_stackheap 与堆栈设置问题

共5条 1/1 1 跳转至

请教__user_initial_stackheap 与堆栈设置问题

菜鸟
2006-12-29 03:00:18     打赏

在启动文件中,
有对各个模式的SP进行设置:
InitStack
MOV R0, LR
;Build the SVC stack
;设置管理模式堆栈
MSR CPSR_c, #0xd3
LDR SP, StackSvc
;Build the IRQ stack
;设置中断模式堆栈
MSR CPSR_c, #0xd2
LDR SP, StackIrq

。。。。。。

那么调用函数 __user_initial_stackheap所返回的参数:
r0:heap基地址;
r1:堆栈基地址;
r2:heap长度限制值(需要的话);
r3:堆栈长度限制值。
其中的堆栈基址是干什么用的?与前面的InitStack 中的SP有什么关系?

就以栈为例,前面的InitStack 中的SP有设置了,
那后边的__user_initial_stackheap返回的参数是干什么用的?


请高手再指点!先谢了!!




关键词: 请教     initial     stackheap     堆栈         

菜鸟
2006-12-30 06:05:00     打赏
2楼

这个函数不是每次都要用,

如果你不在这个函数中设置R1,那么你在Reset init中的SP会被继承下来。

通常有两种情况需要这个函数,当你使用Scatter loading时,

如果你的Heap和Stack不在同一块存储器区域中,

或你的Heap基址比Stack基址大,

必须用这个函数来指明,否则Link时或程序运行会出错。


菜鸟
2007-01-18 00:40:00     打赏
3楼
我也有过同样的问题 多谢二楼

菜鸟
2007-01-24 01:19:00     打赏
4楼
非常感谢斑竹!

院士
2007-01-24 04:00:00     打赏
5楼
以下是引用ARMChina在2006-12-29 22:05:00的发言:

这个函数不是每次都要用,

如果你不在这个函数中设置R1,那么你在Reset init中的SP会被继承下来。

通常有两种情况需要这个函数,当你使用Scatter loading时,

如果你的Heap和Stack不在同一块存储器区域中,

或你的Heap基址比Stack基址大,

必须用这个函数来指明,否则Link时或程序运行会出错。

还有没有其他的解释~~


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]