[Linux]嵌入式系统中栈的地址空间传入


根据系统的memory mapping,链接脚本中规定有栈顶的地址(栈地址变换为从上往下,从大到小,因此规定栈顶)
  __stack_top = ORIGIN(SRAM) + LENGTH(SRAM); //在此规定从ram胡最后开始为栈顶
__stack_bottom = __stack_top – __stack_size
也可以动态计算栈地址
.stack (NOLOAD) : {
. = ALIGN(4) ;
__irq_stack_start = .;
. += 1024;
__irq_stack = .;
__stack_start = .;
__stack_size = __RAM_END – ABSOLUTE(.) – 4;
. += __stack_size;
__stack = .;
} > REGION_BSS

在start.S中,需要拿到栈顶地址
.import __stack_top
会将__stack_top这个变量的地址load到cpu的sp寄存器,从而规定其初始地址
后续栈的使用由程序调用过程决定。这可以理解成编译器维护?