文章目录

  • 前言
  • 一、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等级模式相关推荐

  1. Cortex M3内核架构

    CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...

  2. Cortex‐M3的Faults异常究竟是什么?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...

  3. Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)

    架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...

  4. cortex m3的操作模式和状态

    1.操作状态(operation state): debug state:处理器在调试器发起halt或匹配到断点时,会进入debug state并停止执行指令. thumb state:处理器正在运行 ...

  5. ARM® Cortex®-M内核单片机STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列

     STM32是ARM®Cortex®-M内核单片机.目前提供10大产品线(F0, F1, F2, F3, F4, F7, H7, L0, L1, L4),超过700个型号.STM32产品广泛应用于 ...

  6. 重磅!兆易创新推出中国首款Cortex®-M7内核超高性能MCU GD32H737/757/759系列

    关注.星标公众号,精彩内容每日送达 来源:网络素材 中国北京(2023年5月11日)--业界领先的半导体器件供应商兆易创新GigaDevice (股票代码 603986) 今日宣布,正式推出中国首款基 ...

  7. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 有啥区别

    ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...

  8. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?

    本文转自嵌入式资讯精选公众号,特别鸣谢, 编者按:初学习ARM单片机的同学们可能会对ARM的架构定义并不是很明确,形形色色的名词背后到底代表什么含义呢?请听听这位嵌入式工程师的经验总结. ARM架构: ...

  9. ARM 架构 ARM7 ARM9 STM32 Cortex M3 M4 51 AVR 有啥区别

    ARM架构.ARM7.ARM9.STM32.Cortex M3 M4.51.AVR之间有什么区别和联系? ARM架构:由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~AR ...

最新文章

  1. 多层AOP 解决AOP执行顺序
  2. 深入理解C指针之三:指针和函数
  3. STM32开发 -- IAP详解
  4. RabbitMQ各个名词介绍
  5. 使用 VSCode 编写 .NET Core 项目之初体验
  6. JavaScript 设计模式核⼼原理与应⽤实践 之 开篇:前端工程师的成长论
  7. 连续时间系统的s域分析(Matlab)
  8. vue全屏组件vue-fullscreen使用
  9. matlab求条件概率密度_数值优化方法—迭代法amp;终止条件
  10. HTL5 JavaScript里的DOM节点简单思维导图(元素节点,文本节点,节点的增删改查) 高清可打印
  11. 如何用电脑玩石器时代M 石器时代M手游PC电脑版教程
  12. JAVASE笔记回顾
  13. Git无法clone问题
  14. 我是一个*** (九)
  15. 流媒体分析之rtmp协议srs服务器数据收发
  16. 【积跬步以至千里】如何查看浏览器保存的密码
  17. 班子不到位,一切都白费
  18. 南京师范大学地信(GIS)考研复试经验帖
  19. Delphi 多线程传递参数的问题
  20. Java模板引擎解析原理_关于前后端分离与模板引擎

热门文章

  1. 雅可比行列式的实际意义
  2. Android之BroadcastReceiver
  3. CAM图纸管理系统cad雕刻裁切系统
  4. Escape/Unescape,HTML实体编码,敲击码(Tap code),摩尔斯电码(Morse Code)
  5. 埃隆麝香下一件大事是向宽带发射4万颗卫星
  6. 好的网站好的论坛社区
  7. python制作有道翻译软件
  8. 负数在计算机中的存储和表示
  9. Edgar--java中的delete小老弟的故事
  10. 【转载】最热门的CPLD-FPGA论坛