main函数堆栈:
在离开复位状态后, CM3 做的第一件事就是读取下列两个 32 位整数的值:
1、从地址 0x0000 0000 处取出 MSP 的初始值(__initial_sp)。
2、从地址 0x0000 0004 处取出 PC 的初始值,这个值是复位向量, LSB 必须是 1。 然后从这个值所对应的地址处取指。
硬件自动从0x0000 0000位置处读取数据赋给栈指针sp,然后从0x0000 0004位置处读取数据赋给pc指针,完成复位,结果为:
SP = 0x2000 1068
PC = 0x0000 011D
中断堆栈:
线程堆栈:
线程用的堆栈是OSTaskCreate()函数参数中指定,只有本线程中才能使用这个栈。
Freertos 通过宏portBYTE_ALIGNMENT 定义栈的字节对齐个数,一般是8字节对齐。