【ARM Cotex M 内核的PSP与MSP】

堆栈(Stack)

单片机程序运行时如果发生中断或者函数调用时需要保存当前运行程序的返回地址、局部变量、寄存器的临时值等信息,所用的存储位置被称之为“堆栈”。堆栈需要使用可以快诉访问的的内存,因而单机程序在编译链接过程会分配固定的RAM空间存储空间供堆栈使用。

堆栈指针SP(Stack Pointer)

堆栈指针是一个特殊的寄存器,它始终指向堆栈的顶部地址,即下一个可用存储位置。单片机程序启动时会将链接过程分配的堆栈存储空间的最高地址赋值给SP。(堆栈空间使用时从高地址向低地址方向,使用“先入后出”机制)。
Cortex-M3内核中存在两个Stack Pointer堆栈指针概念:MSP(Main Stack Pointer)和PSP(Process Stack Pointer)。两个指针指向不同的物理地址区域,功能上都属于SP。SP在不同的场景下映射至MSP或者PSP, 不能同时映射至MSP和PSP。

MSP

MSP 即主堆栈指针,MCU 复位后SP 默认映射至MSP。在无操作系统的应用场景,仅使用MSP。

PSP

PSP即线程堆栈指针,在操作系统应用的时候需要使用PSP。CONTROL bit[1]设置为1时 SP切换至PSP, 在进入Handler 模式是通过将CONTROL bit[1]设置为0可将SP 切换至MSP。

操作模式

Arm Cotex M支持两种工作模式(处理器模式/线程模式)和两种特权级(特权级/用户级)。处理器运行在异常或者中断程序时,处理器处于处理器模式。处理器运行在用户程序时,处理区处于线程模式。应用程序可以在特权级和用户级两种访问权限级别状态下运行。异常/中断程序只可以在特权级访问权限级别状态下运行。

特权级用户级
异常(中断)程序处理器模式–(错误用法)
应用程序线程模式线程模式

特权级提供一种机制用来访问存储器的关键区域,同时还提供了一个基本的安全模式,使普通用户程序无法意外甚至恶意地执行涉及要害的操作。通过将CONTROL bit[0]设置为1用户在访问特权级别时可以是程序转换到用户访问级别。但是用户程序不能通过设置CONTROL bit[0]位为0直接变回特权级。必须要通过异常处理程序来设置CONTROL bit[0]位为0似的处理器切换为特权访问级别。
特权级状态先可以访问所有的资源。
用户级为普通应用程序提供一种受限制的工作模式。用户级状态下资源的访问会受限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值