栈空间作为一种存储器运用机制,是“先入先出”的结构,在体系空间中用作暂时数据的存储。栈空间操作的要害之一为栈指针寄存器,每次履行栈操作时,栈指针的内容会主动移动。在M0处理器中,栈指针为R13(SP),并且物理上存在两个栈指针,MSP,PSP,但每次只会运用一个,由CONTROL寄存器以及处理器的运转状况决议。
向栈中存入数据叫“压栈”(运用PUSH指令),回复数据叫“出栈”(运用POP指令)。依据架构不同,有些处理器压栈后地址添加,有些地址减小。Cortex-M0操作根据“满递减”的栈模型,意味着栈指针一直指向栈空间最终一个数据,在履行存储数据PUSH前,栈指针先减小。
PUSH和POP一般用在函数或子程序的开端和结尾处。在函数开端履行时,PUSH操作将寄存器的当时内容存入栈,履行完毕前,POP又将栈空间的数据康复。一般来说履行PUSH操作也要履行POP操作,不然康复的数据或许无法对应之前的寄存器,这样导致无法猜测的成果,比方栈溢出。
栈操作的最小单位是4字节(32位),Cortex-M0的栈空间被规划位字对齐,地址有必要是4的整数倍。因为这个原因,栈指针的最低两位BITS[1:0]在硬件上被置为0,因而读书也为0.
MSP用于一般程序,在由操作体系时,内核运用主栈指针MSP,用户运用进程栈指针PSP。
MSP的初始化坐落程序空间的最初部分,PSP没有进行初始化界说,它需求经过软件初始化。