ARM处理器的 Handler mode 与 Thread mode 以及 MSP 和 PSP
注:本文仅用于本人学习。
1、Handler mode 与 Thread mode
Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。
两种操作模式分别为:处理者模式(handler mode,以后不再把 handler中译——译注)和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。
Cortex-M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
译注: “用户级”其实是从“user”译来的。有些时候英文文档也使用术语“Unprivileged”,后者如果直译,则称为“非特权级” 。为统一术语,本译文一律使用“用户级”。
在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有 MPU,还要 在MPU规定的禁地之外),并且可以执行所有指令。
在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。 事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态(也可以手工指定返回的状态——译 注) 。
2、MSP 与 PSP
MSP和PSP 的含义是Main_Stack_Pointer 和Process_Stack_Pointer,在逻辑地址上他们都是R13;
权威手册上说的很清楚PSP主要是在Handler的模式下使用,MSP主要在线程模式下使用(当然你在线程模式下也可以调用PSP,需要你做特殊的处理);
这意味着同一个逻辑地址,实际上有两个物理寄存器,一个为MSP,一个为PSP,在不同的工作模式调用不同的物理寄存器。举一个简单的例子,很多MCU的的UART只有一个BUFF,TXBUFF和RXBUFF都是一个地址,当你写BUFF时写入的是TXBUFF, 读操作时调用的是RXBUFF。基本原理就是这样。至于为什么这么设计,我想是为了在进行模式转换的时候,减少堆栈的保存工作。同时也可以为不同权限的工作模式设置不同的堆栈。
版权声明:本文为CSDN博主「wfarlen237」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wfarlen237/article/details/78843111
Cortex-M3内核有两个堆栈指针:MSP-主堆栈指针和PSP-进程堆栈指针,在任何一个时刻只能有一个堆栈指针起作用,也就是说任何一个时刻只能使用一个堆栈指针,要么使用MSP,要么使用PSP。何为堆栈指针,其实就是普通的指针,只是他们指向两个不同的堆栈。
MSP:主堆栈指针,当程序复位后(开始运行后),一直到第一次任务切换完成前,使用的都是MSP,即:main函数运行时用的是MSP,运行OSStartHighRdy,运行PendSV程序,用的都是MSP。当main函数开始运行前,启动文件会给这个函数分配一个堆栈空间,像ucos给任务分配堆栈空间一样,用于保存main函数运行过程中变量的保存。此时MSP就指向了该堆栈的首地址。
PSP:进程堆栈指针,切换任务之后PendSV服务程序中有ORR LR, LR, #0x04这句,意思就是PendSV中断返回后使用的PSP指针,此时PSP已经指向了所运行任务的堆栈,所以返回后就可以就接着该任务继续运行下去了。
由于任何一个时刻都只能使用一个堆栈指针(SP),所以,如果在某一个时刻,需要读取或者改变另外一个堆栈指针的内容就得使用特定的指令:MSR和MRS
ARM处理器的 Handler mode 与 Thread mode 以及 MSP 和 PSP相关推荐
- 嵌入式系统的组成、嵌入式处理器分类总结、ARM处理器系列总结、ARM Cortex-M3体系结构总结!
一.嵌入式系统的组成 嵌入式系统的组成主要由:嵌入式硬件系统.嵌入式软件系统. (1)嵌入式硬件系统主要包括:嵌入式处理器.存储器.模拟电路.电源.接口控制器.接插件等 1)嵌入式处理器:是嵌入式系统 ...
- 计算机原理与应用 第二章——ARM处理器
第二章--ARM微处理器 文章目录 第二章--ARM微处理器 一.ARM微处理器特点及功能结构 1.ARM微处理器主要特点 2.指令集方面的主要特点 3.Cortex系列处理器特点 4.ARM处理器功 ...
- 移植嵌入式linux到arm处理器,移植嵌入式Linux到ARM处理器S3C2410:设备驱动
设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能: ·设备初始化.释放: ·提供各类设备服务: ·负责内核和设备之间的数据 ...
- 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
uCOS II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编写.总量约200行的汇编语言部分被压缩到最低限度 ...
- 移植c语言算法到arm上,μCOS-II移植到ARM处理器上的几个要点
原标题:μCOS-II移植到ARM处理器上的几个要点 本文主要介绍μCOS-II移植到ARM处理器上的几个要点,如下所示: uCOS II在ARM处理器上移植过程中的中断处理 uCOS II是一个源码 ...
- RTOS系列文章(6):Cortex-M3/4之SP,MSP,PSP,Thread模式、Handler模式、内核态、用户态
FreeRTOS系列(1):基础知识--中断嵌套 FreeRTOS系列文章(2):PendSV功能,为什么需要PendSV FreeRTOS系列文章(3): 为什么将SysTick和PendSV的优先 ...
- ARM处理器的异常模式
1.ARM处理器有各种异常模式,用于应对ARM出现的不同状态.出现异常时,会随即进入相关的异常向量,同时CPSR的寄存器也会设置成具体的模式. 例:当出现中断时,不管是哪种中断,都会跳转到0x18这个 ...
- Android开发笔记之:Handler Runnable与Thread的区别详解
From:http://www.jb51.net/article/37465.htm 本篇文章是对在Android中Handler Runnable与Thread的区别进行了详细的分析介绍,需要的朋友 ...
- arm服务器芯片尺寸,华为第四代ARM服务器自研芯片Hi1620规格曝光 全球首款7nm工艺的数据中心用ARM处理器...
描述 由于天然对多核友好,ARM这类精简架构在服务器.数据中心等平台也想有所作为,虽然高通的努力不太成功,但并未放弃,现在华为也大踏步跟进了. AnandTech发布了一组华为第四代ARM服务器自研芯 ...
最新文章
- 在虚幻引擎5中重塑火箭联盟——口袋联盟
- OpenGL编程指南13:光源移动
- C++ 字符数组和String类
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1078:求分数序列和
- 虚拟机中dns配置好了但是域名ping不同_弱电工程中常用的几个网络命令,学会后轻松变高手...
- 对象作为参数示例java_功能Java示例 第6部分–用作参数
- 小程序字符串拼接_小程序突袭预约!Yeezy 350quot;氧化满天星quot;拼接配色本月发售!...
- mysql5.0 mac_Mac OS X下MySQL 5.0的默认连接数
- EasyUI 扩展自定义EasyUI校验规则 验证规则
- CentOS下安装Orcale
- xe5 android sample 中的 SimpleList 是怎样绑定的
- VMware Sphere 虚拟磁盘创建选项
- 如何编写 maptalks plugin
- python 插入查找
- Gradle与Makefile构建工具的对比
- 【零基础】一文读懂CPU(从二极管到超大规模集成电路)
- HTML5网页设计的基本知识-几个概念
- verilog 状态机 三角波 发生器
- 北京内推 | Hulu机器学习应用平台团队招聘推荐大数据方向暑期实习生
- 10月25日 c语言 打印所有水仙花数
热门文章
- 如何在A4纸上打印连续的条形码
- 【CCF会议期刊推荐】中国计算机协会(CCF)推荐计算领域高质量科技期刊分级目录(T1类)
- Python库的使用
- java毕业生设计新疆旅游专列订票系统计算机源码+系统+mysql+调试部署+lw
- 对于美国中部覆盖图防护林形态的自动检测技术
- 最常用的三角函数值和三角变形公式
- 小说中场景的功能_一般文章里的场景描写有什么作用啊详细一些的 最好在
- hardware计算机专业英语翻译,hardware是什么意思中文翻译
- 如何让谷歌收录自己的网站?谷歌多久收录我的网站?
- linux和windows双系统怎么引导,如何解决Linux和Windows双系统的引导问题