ARM编程模型-状态模式

news2024/11/14 17:18:57

ARM的两种工作状态
大部分的ARM处理器都实现了两种指令集,32位ARM指令集和16位Thumb指令集,看生成的机器码是32位的还是16位的

ARM v6引入了新的指令集Thumb-2,能够提供32位和16位的混合指令,在增强了灵活性的同时保持了代码的高密度。
ARM的2种工作状态
ARM状态:执行32位ARM指令集
Thumb状态:执行16位Thumb指令集或v6及以后版本支持的Thumb-2指令集。
在这里插入图片描述

1.ARM v4T~v6的工作模式

有七种基本的操作模式:
每一种模式只能访问自己的栈空间和不通的寄存器子集。
有一些操作只能在特权模式下执行。
在这里插入图片描述
ARM之所以设计出这么多种模式出来,就是为了「应对CPU在运行时各种突发事件」,比如要支持正常的应用程序的运行,在运行任何一个时间点又可能发生很多异常事件,比如:关机、收到网卡信息、除数为0、访问非法内存、解析到了非法指令等等,不光要能处理这些异常还要能够从异常中再返回到原来的程序继续执行。

  1. 用户模式:用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。
  2. 系统模式:系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
  3. 一般中断模式:一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。
  4. 快速中断模式:快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。
  5. 管理模式:管理模式是「CPU上电后默认模式」,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式。
  6. 终止模式:中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。
  7. 未定义模式:未定义模式用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。
  8. Monitor:是为了安全而扩展出的用于执行安全监控代码的模式;也是一种特权模式
    除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(ExceptionModes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。

2.模式切换

ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。

3.异常(Exception)

指由处理器执行指令导致原来运行程序的中止,异常与指令运行相关,是CPU执行程序产生的,是同步的,可分为精确异常和非精确异常。异常处理遵守严格的程序顺序,不能嵌套,只有当第一个异常处理完并返回后才能处理后续的异常。
异常源
要进入异常模式,一定要有异常源,ARM规定有7种异常源:
在这里插入图片描述
异常源与模式关系

  1. 重启异常进入管理模式;
  2. 快速中断请求异常进入快中断模式,支持高速数传输及通道处理(FIQ异常响应时进入此模式);
  3. 中断请求异常进入中断模式,用于通用中断处理,(IRQ异常响应时进入此模式);
  4. 预取指中止,数据中止异常进入中止模式,用于支持虚拟内存和/或存储器保护;
  5. 未定义指令异常进入未定义模式,支持硬件协处理器的软件仿真(未定义指令异常响应时进入此模式) ;
  6. 软件中断,复位异常进入管理模式,操作系统保护代码(系统复位和软件中断响应时进入此模式) ;
    异常发生之后,CPU必须要立刻做出响应

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

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

相关文章

Linux基础学习2

Linux基础学习2 popen函数 popen函数 https://blog.csdn.net/yzy1103203312/article/details/78483566 https://blog.csdn.net/xy1413_/article/details/127135608 典型用法: FILE * fp popen("ifconfig eth0", "r"); if (!fp) { fprintf…

再谈IOS开发环境配置(2023-09-01 新)

关于IOS的开发,需要配置证书、密钥、管理标识符、功能配置等等,很是繁杂,以前也配置过,这次因为重新购买了新的M1笔记本,准备重新配置下,顺便记录,以便查询。 如果要开发IOS,首先需要…

2023高教社杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模…

JVM学习(一)--程序计数器

作用:记住下一个jvm指令的执行地址 每一行java源代码,会被编译为多行jvm指令,上文所说的执行地址就是这里的0,3,4等 ,由于执行访问特别频繁,程序计数器的底层是有寄存器来实现的 特点: 线程私有&#xff…

爬虫进阶-反爬破解5(selenium的优势和点击操作+chrome的远程调试能力+通过Chrome隔离实现一台电脑登陆多个账号)

目录 一、selenium的优势和点击操作 二、chrome的远程调试能力 三、通过Chrome隔离实现一台电脑登陆多个账号 一、selenium的优势和点击操作 1.环境搭建 工具:Chrome浏览器chromedriverselenium win用户:chromedriver.exe放在python.exe旁边 MacO…

这段代码这么写有什么问题

这段代码这么写有什么问题? List<String> baseRelList1 new ArrayList<>();epmPersonList.forEach(Obj ->{interviewBacklogMessageList.forEach(t ->{if (!Obj.equals(t.getPsnNum())){baseRelList1.add(Obj);}});});这段代码存在一个问题&#xff0c;即…

transformer源码

1.传统RNN网络 每一层都需要上一层执行完才能执行 1.1 自注意力 在一句话中找到it_指代的是什么&#xff0c;它的上下文语境是什么&#xff1f; self-attetion计算 1.2 multi-header机制 1.3 堆叠多层self-attention&#xff0c;相当于再一次卷积 1.4 位置信息编码 1.5 残…

unity 场景烘焙问题之模型UV有重叠

问题现象&#xff1a;模型烘焙出来后&#xff0c;呈现黑色或布满脏斑&#xff0c;有可能是没有展UV&#xff0c;也有可能是UV重叠了 并且也会出现警告提示&#xff0c;如下图&#xff1a; 如果我们勾选了如下图,还在提示我们勾选&#xff0c;那可能就是 UV重叠了 解决方案 UV…

C++:输出系统时间(及报错处理)

#include <iostream> #include <ctime>using namespace std;int main() {// 基于当前系统的当前日期/时间time_t now time(0);cout << "1970 到目前经过秒数:" << now << endl;tm* ltm localtime(&now);// 输出 tm 结构的各个组…

【微服务】一张图搞懂微服务架构设计

一张图搞懂微服务架构设计 1.前言2.流量入口 Nginx3.网关4.业务组件5.服务注册中心6.缓存和分布式锁7.数据持久层8.结构型数据存储9.消息中间件10.日志收集11.任务调度中心12.分布式对象存储 1.前言 当前&#xff0c;微服务架构在很多公司都已经落地实施了&#xff0c;下面用一…

气象科普丨气象站的分类与应用

气象站是一种用于收集、分析和处理气象数据的设备。根据不同的应用场景和监测需求&#xff0c;气象站可以分为以下几类&#xff1a; 一、农业气象站 农业气象站是专门为农业生产服务的气象站&#xff0c;主要监测土壤温度、土壤湿度等参数&#xff0c;为农业生产提供科学依据…

高效率、高质量的DMG映像制作:DMG Canvas for mac,助你轻松实现

如果你是一位开发者或企业用户&#xff0c;你一定知道DMG磁盘映像文件在分发应用程序或文件时的重要性。DMG磁盘映像文件可以让用户轻松地创建磁盘映像&#xff0c;并将其挂载到Mac电脑上&#xff0c;从而方便地安装或使用应用程序或文件。 然而&#xff0c;传统的DMG磁盘映像…

数学之美 — 1

为什么你会想和他人共享那些美丽的事物呢&#xff1f;因为这会让他&#xff08;她&#xff09;感到愉悦&#xff0c;也能让你在分享的过程中重新欣赏一次事物的美。 ——David Blackwell 1、感官之美&#xff0c;对于那些有规律的事物&#xff0c;你可以利用自己的视觉、触觉、…

CodeBlocks20.03配置wxWidgets

背景 - 现在是2023年 1. 很多年前&#xff0c;下载使用CodeBlocks就发现里面有自带的wxWidgets Project的项目&#xff0c;然而一路Next下去出来的程序根本就不能运行&#xff0c;心有不甘&#xff1b; 2. 前几年&#xff0c;用python做小工具的时候&#xff0c;界面用的wxPy…

AutoSAR CP 飞阅TIME

目录 什么是autosar autosar 做了什么 Foundation、CP、AP CLASSIC PLATFORM &#xff08;CP&#xff09; ADAPTIVE PLATFORM 基于autosar 开发 SWC Port Runnables RTE BSW MCAL CDD I/O Hardware Abstraction Communication Hardware Abstraction Memory Har…

Navicat介绍及下载安装教程

Navicat是一个广泛使用的数据库管理工具&#xff0c;可用于管理多种数据库系统&#xff0c;如MySQL、MariaDB、Oracle等。它提供了丰富的功能&#xff0c;使得管理数据库变得更加容易和高效。安装Navicat十分简单&#xff0c;只需下载安装包并按照向导进行操作即可。在安装完成…

SQL 语句学习总结:

1. 四范式&&范式好处&#xff1a; 数据库范式是数据表设计的规范&#xff0c;在范式规范下&#xff0c;数据库里每个表存储的重复数据降到最少&#xff08;这有助于数据的一致性维护&#xff09;&#xff0c;同时在数据库范式下&#xff0c;表和表之间不再有很强的数据…

C语言——多文件编程

多文件编程 把函数声明放在头文件xxx.h中&#xff0c;在主函数中包含相应头文件在头文件对应的xxx.c中实现xxx.h声明的函数 防止头文件重复包含 当一个项目比较大时&#xff0c;往往都是分文件&#xff0c;这时候有可能不小心把同一个头文件 include 多次&#xff0c;或者头…

Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程

你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。标题取自其中三则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。 本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选…

API接口接入电商平台案例,数据采集获取商品历史价格信息示例

商品历史价格接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、最低价、当前价格、价格信息等详细信息 。 获取商品历史价格接口API是一种用于获取电商平台上商品历…