ARM基础(2):模式和特权等级(User/Thread mode和Privileged level)

news2024/11/24 20:14:40

Cortex-M3处理器支持两种模式和两种特权级别。
如下图所示,当处理器运行于Thread mode时,它可以处于PrivilegedUser级别;而Handler mode下,只能处于Privileged级别。当处理器复位完毕后,处于Thread mode
在这里插入图片描述
User级别(Thread mode)下,访问系统控制区域(配置寄存器和调试组件)是阻塞的,对特殊寄存器的访问(如使用MSR指令)也是不允许的(访问APSR寄存器除外),否则会产生一个错误异常。

处于Privileged级别时,软件可以通过CONTROL寄存器将程序切换到User级别。当产生一个异常时,处理器会切换到Privileged状态,而退出异常时,则会恢复进入异常之前的状态。

用户程序不能直接通过写CONTROL寄存器将状态切换为Privileged状态,而必须通过异常处理程序更改CONTROL寄存器,以便在返回到Thread mode时将处理器切换到Privileged级别,如下图所示:
在这里插入图片描述
PrivilegedUser级别的存在可以让系统更加安全和更具鲁棒性。比如,当程序出错的时候,是修改不了NVIC的CONTROL寄存器的。另外,如果使能了MPU(内存保护单元),还可以阻止用户程序访问特权进程的内存区域。

在简单的应用中,不需要区分PrivilegedUser级别。在这种情况下,不需要使用User级别,也不需要更改CONTROL寄存器。我们可以将用户程序和内核的堆栈区分开来以避免可能的程序崩溃。比如,用户程序(Thread mode)使用PSP堆栈,而异常处理程序使用MSP堆栈。进入和退出异常处理程序时会自动切换这两个堆栈指针。
在这里插入图片描述
处理器的访问级别由CONTROL寄存器来定义,当其bit0为0时(Privileged mode),处理器模式将在异常发生时进行切换。
在这里插入图片描述
当bit0为1时(User mode),处理器模式和访问级别都会在异常发生时切换。
在这里插入图片描述
CONTROL寄存器的bit0仅在Privileged level可编程。对于一个User level的程序来说,要切换到Privileged mode,它必须触发一个异常(如SVC异常),并在处理程序中修改CONTROL[0]


Cortex-M系列开始出现了上面这些概念,而在ARM7中没有这些模式,这里来做一个对比:

Modes and Exceptions in the ARM7Corresponding Modes and Exceptions in the Cortex-M3
Supervisor (default)Privileged, thread
Supervisor (software interrupt)Privileged, Supervisor Call (SVC)
FIQPrivileged, interrupt
Interrupt request (IRQ)Privileged, interrupt
Abort (prefetch)Privileged, bus fault exception
Abort (data)Privileged, bus fault exception
UndefinedPrivileged, usage fault exception
SystemPrivileged, thread
UserUser access (nonprivileged), thread

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM(spring+springmvc+mybatis)完全注解开发整合

SSM(springspringmvcmybatis)完全注解开发整合 目录结构如图: 创建数据库 create database mydb; use mydb; create table tbl_users(id int primary key auto_increment,username varchar(20),password varchar(20),age int,birthday date );insert tbl_users(…

[Cortex-M3]-4-如何在内嵌RAM中运行程序

[Cortex-M3]-1-启动流程-启动文件[Cortex-M3]-2-map文件解析[Cortex-M3]-3-分散加载文件解析(.sct)[Cortex-M3]-4-如何在内嵌RAM中运行程序 1 定义items 在进行项目开发时,可以在project items中创建debug和release,并确定。 平时调试下拉选…

web结课作业的源码——HTML+CSS+JavaScript仿oppo官网手机商城(1页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

15、简单了解Vue

1、vue概述 Vue是一套前端框架,可以免除原生JavaScript中的DOM操作,简化书写。 基于MVVM(Model-View-View Model)思想,实现数据的双向绑定,将编程的关注点放在数据上 vue的官网:https://cn.v…

电脑数据转移到新电脑?换新电脑如何转移软件

电脑数据转移到新电脑?许多用户在下载游戏的时候,没有更改默认安装位置,直接把游戏安装到了C盘里,结果导致C盘空间不足,于是希望将游戏移动到其他驱动器以释放空间。也有的用户是更换了电脑,不想重新安装游…

常用数据库之sqlite的使用

2.1 介绍 sqlite为关系型数据库,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌…

反序列化__wakeup

简介 __wakeup()&#xff0c;执行unserialize()时&#xff0c;先会调用这个函数。 <?php class c1 {private $argv;private $method;function __construct($argv,$method){$this->argv$argv;$this->method$method;}public function f1(){ech…

BUG系列路径规划算法原理介绍(六)——BugFlood算法

本系列文章主要对Bug类路径规划算法的原理进行介绍&#xff0c;在本系列的第一篇文章中按照时间顺序梳理了自1986年至2018年Bug类路径规划算法的发展&#xff0c;整理了13种BUG系列中的典型算法&#xff0c;从本系列的第二篇文章开始依次详细介绍了其中具有代表性的BUG1、BUG2、…

KubeSphere开启DevOps 功能教程

基于 Jenkins 的 KubeSphere DevOps 系统是专为 Kubernetes 中的 CI/CD 工作流设计的&#xff0c;它提供了一站式的解决方案&#xff0c;帮助开发和运维团队用非常简单的方式构建、测试和发布应用到 Kubernetes。它还具有插件管理、Binary-to-Image (B2I)、Source-to-Image (S2…

MySQL遵循最左前缀匹配原则!面试官:回去等通知吧

我们都知道&#xff0c;MySQL的Innodb引擎中&#xff0c;索引是通过B树来实现的。不管是普通索引还是联合索引&#xff0c;都需要构造一个B树的索引结构。 那么&#xff0c;我们都知道普通索引的存储结构中在B树的每个非节点上记录的索引的值&#xff0c;而这棵B树的叶子节点上…

Markdown官方教程(六)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Spring Boot 创建项目 / 目录介绍 / 配置文件

目录 Spring Boot项目创建 一、通过IDEA来创建Spring Boot项目 二、通过网页版创建Spring Boot项目 Spring Boot项目目录介绍 Spring Boot项目创建 一、通过IDEA来创建Spring Boot项目 社区版IDEA需要先安装 Spring Assistant 插件。 1. 创建新项目&#xff0c;选择Sprin…

2022最后一个月,我们该如何学Java​?

2022最后一个月&#xff0c;我们该如何学Java&#xff1f; 互联网的快速发展和激烈竞争&#xff0c;在世界编程语言排行榜中&#xff0c;Java位列前三&#xff0c;占全球编程市场份额的12%左右,各大公司对Java工程师的需求量都很大&#xff0c;要求也越来越高&#xff0c;优秀…

Gradle学习第一篇——自定义Gradle插件

纸上得来终觉浅&#xff0c;绝知此事要躬行。 自定义Gradle插件有三种方法&#xff0c;各有优劣处&#xff0c;同类博客文章很多但是有的语法已经过时了&#xff0c;笔者运行环境 Android Studio Dolphin && gradle-7.4-bin 文章目录第一种 build script (单文件生效)第…

Linux目录操作

一、常用权限操作 权限操作实战 1、创建文件&#xff0c;设置其用户组 root用户创建新文件love.txt 命令&#xff1a;echo I Love you > love.txt 查看文件love.txt的用户及用户组 将其用户组改为lzy用户组 命令&#xff1a;chgrp lzy love.txt 查看文件love.txt的用…

System Verilog断言

简介 断言通常被称为序列监视器或者序列检验器&#xff0c;是对设计应当如何执行特定行为的描述&#xff0c;是一种嵌入设计检查。如果检查的属性&#xff08;property&#xff09;不是我们期望的表现&#xff0c;那么在我们期望事件序列的故障上会产生警告或者错误提示。 断言…

SpringMVC:整合SSM框架

一、大致框架 1.建立数据库&#xff0c;并导入数据 create database cjgl; create table books( bookID int(10) not null auto_increment comment 书id, bookName varchar(100) not null comment 书名, bookCounts int(11) not null comment 数量, detail varchar(200) no…

C. Planar Reflections

题目如下&#xff1a; 思路 or 题解 我们可以通过图解发现&#xff1a;可以递推找到答案了 我们约定&#xff1a;dp[i][j]dp[i][j]dp[i][j] 第 iii 个板, 衰变年龄为jjj 的答案是 dp[i][j]dp[i][j]dp[i][j] 我们通过图解找到转移方程&#xff1a; dp[i][j]dp[i−1][j]dp[n−i]…

[附源码]Python计算机毕业设计Django时间管理软件app

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

数据结构【红黑树模拟实现】

目录 红黑树&#xff1a;基于AVL树改进 红黑树的性质 红黑树基本结构 insert基本结构 新增节点的默认颜色为红色 节点性质总结 情况一: cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u存在且为红 情况二: cur为红&#xff0c;p为红&#xff0c;g为黑&#xf…