找回密码
 注册
关于网站域名变更的通知
查看: 260|回复: 3
打印 上一主题 下一主题

初始化代码中分配堆栈的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-12-7 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
初始化代码中分配堆栈的问题 MSR CPSR_c, #0xd3 ;进入特定的处理器模式 0 s" [/ i# j$ h7 R
LDR SP, StackSvc ;给当前处理器模式的堆栈指针赋值,这只是一个值而已, * Q9 A4 x3 B' Q1 h' k1 }0 Z2 z- r
;他在接下去的 DCD 语句赋值   D% M6 {  D6 _/ u$ ]; n0 p
SvcStackSpace SPACE SVC_STACK_LEGTH * 4 6 G- o, c8 |: m0 w' T' ^* l, ^: o( U
这个语句开辟一个 SVC_STACK_LEGTH * 4 大小的内存,SvcStackSpace 是这块内存的标% f, B! p/ D$ v1 G
号,我想应该就是内存的首地址,这样应该好理解了.
# O& Z8 J! D2 C+ F9 q2 O# KStackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4 & [" Q) s# A& s, @( z* [5 ]
这个语句就是把这个首地址加上堆栈大小值. 1 M( y( t' n* ?) k( J9 T, Y
( R- L* e) v% w5 p

该用户从未签到

2#
发表于 2022-12-7 11:12 | 只看该作者
计算出堆栈指针来,我想这个堆栈是向下生长的,所以 SP 赋值的是堆栈地址最高的那个。

该用户从未签到

3#
发表于 2022-12-7 13:35 | 只看该作者
堆区(HEAP):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。在单片机的sram中的ZI-data中。由malloc 系列函数或new 操作符分配的内存。其生命周期由free 或delete 决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。向上生长。
2 Z3 @8 u5 E9 y, n8 `6 t栈区(STACK):由编译器自动分配释放,在单片机的sram中的ZI-data。保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。由高地址向低地址生长。

该用户从未签到

4#
发表于 2022-12-7 13:52 | 只看该作者
空间只是静态的栈使用统计,链接器无法统计动态使用情况,例如链接器无法知道递归函数的递归深度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-10 20:30 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表