EDA365电子论坛网

标题: 初始化代码中分配堆栈的问题 [打印本页]

作者: Maskman    时间: 2022-12-7 10:22
标题: 初始化代码中分配堆栈的问题
初始化代码中分配堆栈的问题 MSR CPSR_c, #0xd3 ;进入特定的处理器模式 * x8 S" e/ x5 G' e0 C+ m. S0 R' U
LDR SP, StackSvc ;给当前处理器模式的堆栈指针赋值,这只是一个值而已, 1 I( E5 B7 H- F( @
;他在接下去的 DCD 语句赋值   N  x) [5 Y5 `/ l' T
SvcStackSpace SPACE SVC_STACK_LEGTH * 4 4 j: ]  j( W3 O" ^% e' v5 g4 x5 H
这个语句开辟一个 SVC_STACK_LEGTH * 4 大小的内存,SvcStackSpace 是这块内存的标
# T" \. ], L" {号,我想应该就是内存的首地址,这样应该好理解了. ) {. t( ]' x" n) t# U: K
StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
: c" b/ }; I0 X) {2 G; J+ m5 t8 {这个语句就是把这个首地址加上堆栈大小值.
9 o! N8 l" N/ W; H' M7 J
  M3 {9 T' B+ r& L
作者: Terran    时间: 2022-12-7 11:12
计算出堆栈指针来,我想这个堆栈是向下生长的,所以 SP 赋值的是堆栈地址最高的那个。
作者: tick_tock    时间: 2022-12-7 13:35
堆区(HEAP):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。在单片机的sram中的ZI-data中。由malloc 系列函数或new 操作符分配的内存。其生命周期由free 或delete 决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。向上生长。
! E0 Y+ L$ k4 w+ i  |! D4 r栈区(STACK):由编译器自动分配释放,在单片机的sram中的ZI-data。保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。由高地址向低地址生长。
作者: Ele_insect    时间: 2022-12-7 13:52
空间只是静态的栈使用统计,链接器无法统计动态使用情况,例如链接器无法知道递归函数的递归深度。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2