《Cortex-M0权威指南》之体系结构---栈空间操作
2016-11-14 15:13
197 查看
转载请注明来源:cuixiaolei的技术博客
栈空间作为一种存储器使用机制,是“先入先出”的结构,在系统空间中用作临时数据的存储。栈空间操作的关键之一为栈指针寄存器,每次执行栈操作时,栈指针的内容会自动移动。在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没有进行初始化定义,它需要通过软件初始化。
相关文章推荐
- 《Cortex-M0权威指南》之体系结构---系统模型
- 《Cortex-M0权威指南》之体系结构---异常和中断
- 顺序性,一致性,原子性:现代多核体系结构与原子操作·CAS与自旋锁·自旋锁与并发编程的原语·语句原子性和编程逻辑的原子性·行锁与数据库事务原子性·binlog与数据库同
- Oracle体系结构之-数据库、表空间、实例简介
- 计算机体系结构:比特级的操作
- ARM1176JZF-S 体系结构之寄存器和操作模式
- Hbase(nosql)体系结构有基本操作 笔记八
- 20151027 linux文件操作命令 体系结构
- 为什么链表操作过程中对于结构体指针,都要用malloc来开辟内存空间
- _00002 Hadoop HDFS体系结构及shell、java操作方式
- ARM Cortex-A8体系结构基础
- ARM Cortex-A8体系结构
- 集合框架体系结构,list、set操作数据,泛型(一)
- Hbase(nosql)体系结构有基本操作 笔记八
- 嵌入式操作体统体系结构
- Oracle体系结构之-数据库、表空间、实例简介
- Linux体系结构(四): 内核空间和用户空间
- Oracle体系结构之-数据库、表空间、实例简介
- 逻辑结构操作(表空间,数据文件,段,块,区)
- MFC浅析(2) 文档视图结构中文档操作流程