在STM32中,堆栈是向下生长的满栈
Cortex-M4/M3 处理器拥有 R0-R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。
PUSH {R0} ; *(--R13)=R0。R13 是 long*的指针
POP {R0} ; R0= *R13++
在压栈时,如果是先减地址再存,则是向下生长的,反之,相反。
满栈,堆栈指针指向的是最后一个可用数据,空栈,堆栈指针指向的是一个空的,可用的堆栈地址。
空堆栈,栈指针pos指向的是一个空的slot,也就是下一个可用的空闲。便于压栈,而弹的时候需要弹pos-1或者pos+1。
满堆栈,栈指针pos指向的是一个有可用数据的slot,也就是最后一个使用的空间。便于弹栈,而压的时候需要压pos+1或者pos-1。