Cortex-M3内核之CPU等级模式
文章目录
- 前言
- 一、CPU的运行模式
- 二、CPU模式控制
- 2.1.CPU模式状态图
- 2.2.CONTROL寄存器
- 2.3.特权级变用户级
- 2.4.用户级变特权级
- 总结
前言
在Windows上或者Linux上的一个软件崩溃不会导致整个系统的崩溃,这是因为在硬件上能运行Windows或者Linux的硬件包含了MMU(Memory Manage Unit)内存管理单元,在Cortex-M3提供的框图中有MPU(Memory Protection Unite)内存保护单元,所以该部件不是必备的,所以在大部分单片机中不具备该部件,为了让设计的程序更稳定,需要了解CPU的模式并进行控制。
一、CPU的运行模式
Cortex-M3处理器的运行模式包括线程模式和特权模式,这两个模式决定了CPU正在运行正常代码还是异常中断代码。特权的分级分为特权级和用户级,这提供了一种存储器访问的保护机制,普通用户不能随意执行核心致命操作。
特权等级的引入,在硬件层面上限制了某些不受信任或者没有调试好的程序,让他们不能随便配置涉及要害的寄存器,从而提高系统的可靠性。
另外操作系统内核通常运行在特权级,在操作系统开启一个用户程序后,通常让用户程序运行在用户级,达到用户程序崩溃不会导致系统整体崩溃或受损。
上图表明特权模式下,CPU既可以执行异常代码(handle)也可以执行线程代码(thread),在用户模式下,CPU只能执行线程代码(thread)无权执行中断异常代码(handle)
二、CPU模式控制
2.1.CPU模式状态图
上图显示:系统上电复位系统处于特权级thread模式,通过手动修改CONTROL寄存器进行降级处理,由特权级thread模式变为用户级thread模式;通过触发异常的方式进行升级处理,让CPU在用户线程模式变为特权级线程模式。本文将记录如何对CPU模式进行转换操作,并观察实验现象。
2.2.CONTROL寄存器
CONTROL寄存器用于定义特权等级、堆栈指针的选择。
位 | 功能 |
---|---|
CONTROL[1] | 堆栈指针选择:0 = 选择主堆栈指针MSP ,1 = 选择线程堆栈指针PSP |
CONTROL[0] | 特权等级模式:0 = 特权级线程模式,1 = 用户级线程模式,handle永远是特权级 |
在Cortex-M3的Handle模式中,一直选择主堆栈指针即CONTROL[1] = 0,
在线程模式下可以是主堆栈指针可以是线程堆栈指针即CONTROL[0] = 0 | 1,
在特权模式下更改CONTROL[0]实现模式切换
CONTROL寄存器的操作指令:MRS,MSR
MRS R0 , CONTROL ;读CONTROL值到寄存器R0
ORR R0,R0,#1 ;设置bit0
MSR CONTROL , R0 ;写R0的值到CONTROL中
2.3.特权级变用户级
在特权等级下程序可以配置一些中断寄存器,在非特权模式下程序配置中断寄存器时会进入硬件错误中断
上图显示在非特权等级模式下,通过修改CONTROL寄存不能提升访问等级
2.4.用户级变特权级
提升访问等级的方法是进入异常中断中,在中断中修改CONTROL寄存器来实现等级提升
总结
本篇文章记录了通过修改CONTROL寄存器控制特权访问等级,中间涉及汇编代码,拓展自己的视野
Cortex-M3内核之CPU等级模式相关推荐
- Cortex M3内核架构
CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...
- Cortex‐M3的Faults异常究竟是什么?
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...
- Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)
架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...
- cortex m3的操作模式和状态
1.操作状态(operation state): debug state:处理器在调试器发起halt或匹配到断点时,会进入debug state并停止执行指令. thumb state:处理器正在运行 ...
- ARM® Cortex®-M内核单片机STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列
STM32是ARM®Cortex®-M内核单片机.目前提供10大产品线(F0, F1, F2, F3, F4, F7, H7, L0, L1, L4),超过700个型号.STM32产品广泛应用于 ...
- 重磅!兆易创新推出中国首款Cortex®-M7内核超高性能MCU GD32H737/757/759系列
关注.星标公众号,精彩内容每日送达 来源:网络素材 中国北京(2023年5月11日)--业界领先的半导体器件供应商兆易创新GigaDevice (股票代码 603986) 今日宣布,正式推出中国首款基 ...
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 有啥区别
ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?
本文转自嵌入式资讯精选公众号,特别鸣谢, 编者按:初学习ARM单片机的同学们可能会对ARM的架构定义并不是很明确,形形色色的名词背后到底代表什么含义呢?请听听这位嵌入式工程师的经验总结. ARM架构: ...
- ARM 架构 ARM7 ARM9 STM32 Cortex M3 M4 51 AVR 有啥区别
ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...
最新文章
- 多层AOP 解决AOP执行顺序
- 深入理解C指针之三:指针和函数
- STM32开发 -- IAP详解
- RabbitMQ各个名词介绍
- 使用 VSCode 编写 .NET Core 项目之初体验
- JavaScript 设计模式核⼼原理与应⽤实践 之 开篇:前端工程师的成长论
- 连续时间系统的s域分析(Matlab)
- vue全屏组件vue-fullscreen使用
- matlab求条件概率密度_数值优化方法—迭代法amp;终止条件
- HTL5 JavaScript里的DOM节点简单思维导图(元素节点,文本节点,节点的增删改查) 高清可打印
- 如何用电脑玩石器时代M 石器时代M手游PC电脑版教程
- JAVASE笔记回顾
- Git无法clone问题
- 我是一个*** (九)
- 流媒体分析之rtmp协议srs服务器数据收发
- 【积跬步以至千里】如何查看浏览器保存的密码
- 班子不到位,一切都白费
- 南京师范大学地信(GIS)考研复试经验帖
- Delphi 多线程传递参数的问题
- Java模板引擎解析原理_关于前后端分离与模板引擎