M0的存储器系统以及栈操作

3.3 存储器系统

Cortex-M0处理器具有4GB的存储器地址空间。在体系结构上,存储器空间被分作一系列的区域,每个区域都有推荐的用途
----------------以提高不同设备间的可移植性。
存储器映射
Cortex-M0处理器内置了各种部件,例如NVIC(嵌套向量中断控制器)和一些调试部件,它们都被映射到系统空间的固定地址上。因此所有基于Cortex MO的设备在中断控制和调试方面,都具有相同的编程模型。这种处理有利于软件移植,也方便调试工具供应商为基于Cortex-M0的微控制器和片上系统(SoC)提供开发调试方案。

Cortex-M0的存储器系统支持各种大小的数据传输,包括字节(8位),半字(16位)、字(32位)

******************************************************************************************************************************************\

3.4栈空间操作

栈空间作为一种存储器使用机制,是先人先出的结构,在系统空间中用作临时数据存
储。栈空间操作的关键点之一为
栈指针寄存器
**,每次执行栈操作时,******栈指针的内容自动调
整。****在Cortex-M0处理器中,栈指针为R13,而且物理上存在着两个栈指针,但每次只会使
用一个,这是由CONTROL寄存器以及处理器的状态决定的(见图3.7)。
按照通常的说法,向栈中存储数据称为“压栈"(使用PUSH指令),恢复数据则称作“出
栈"(使用POP指令)。根据所使用架构的不同,有些处理器在向栈存人数据时地址会自动
增加,而有些则会减小。CortexM0处理器的栈操作基于
“满递减"(**fulldescending)的栈模
型,这就意味着栈指针始终指向栈空间的最后一个数据,在执行数据存储前(PUSH),栈指
针会首先减小。
*PUSH和POP通常用在函数或子程序的开始和结尾处。*在函数开始执行时,PUSH
操作将寄存器的当前内容存人栈空间;执行结束前,POP又将栈空间存储的数据恢复。一
般说来,对每个寄存器的PUSH操作都应相应地进行POP操作。否则恢复的数据可能无
法对应之前的寄存器,这样会导致无法预期的后果,比如栈溢出.
在这里插入图片描述

可以通过R13或SP访问R13或SP,根据处理器状态和CONTROL寄存器值的不同,访问的栈指针可以是主栈指针(MSP),也可以是进程栈指针(PSP)。许多简单的应用只会用到一个栈指针,一般默认是主栈指针(MSP),进程栈指针通常只用于嵌人式应用的操作系统(OS)。

由于栈是向下生长的(满递减),内存的上边界通常会被用作栈指针的初始值。

每次出栈以及压栈操作的最小单位是4字节(32位),还可以使用一条指令实现对多个寄存器的压栈和出栈操作。Cortex-M0的栈空间被设计为字对齐的(地址值必须是4的倍数,比如0x0、0x4、0x8等),由于这个原因,栈指针的最低两位(BITS[1:0])在硬件上被置为了0,因此读出固定为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值