ARM的异常处理

概念

    处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生

    这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件

    异常事件处理完成之后再返回到被异常打断的点继续执行程序

异常处理机制

    不同的处理器对异常的处理的流程大体相似,但是不同的处理器在具体实现的机制上有所不同;比如处理器遇到哪些事件认为是异常事件遇到异常事件之后处理器有哪些动作、处理器如何跳转到异常处理程序如何处理异常、处理完异常之后又如何返回到被打断的程序继续执行等我们将这些细节的实现称为处理器的异常处理机制

ARM异常源

 概念

    导致异常产生的事件称为异常源

ARM异常源(注意和工作模式区分)

    FIQ  快速中断请求引脚有效 

    IRQ  外部中断请求引脚有效

    Reset  复位电平有效

    Software Interrupt  执行swi指令

    Data Abort  数据终止

    Prefetch Abort  指令预取终止

    Undefined Instruction  遇到不能处理的指令

ARM异常模式

    在ARM的基本工作模式中有5个属于异常模式,即ARM遇到异常后会切

换成对应的异常模式

maybe多个异常源对应一个异常模式

ARM寄存器

ARM异常响应

处理异常必须在ARM状态下

ARM产生异常后的动作(自动完成)

    1.拷贝CPSR中的内容到对应异常模式下的SPSR_<mode>

    2.修改CPSR的值

      2.1.修改中断禁止位禁止相应的中断(禁止另一个相同异常打断这一个异常),高优先级的打断可以打断低优先级的中断)例FIQ打断IRQ中断

     2.2.修改模式位进入相应的异常模式     

      2.3.修改状态位进入ARM状态

T=0时为ARM状态,T=1时为thumb状态

处理异常必须在ARM状态下

  3.保存返回地址(即中断的下一条地址)到对应异常模式下的LR_<mode>

R14(LR,Link Register)(见ARM寄存器那一篇文章)

    4.设置PC为相应的异常向量(异常向量表对应的地址)非跳转到异常处理程序

异常向量表

异常向量表
 

> 异常向量表的本质是内存中的一段代码

    > 表中为每个异常源分配了四个字节的存储空间

    > 遇到异常后处理器自动将PC修改为对应的地址

    > 因为异常向量表空间有限一般我们不会再这里写异常处理程序,而是在对应的位置写一条跳

  转指令使其跳转到指定的异常处理程序的入口

例:异常源为IRQ时,pc值为0x18

    注:ARM的异常向量表的基地址默认在0x00地址

        但可以通过配置协处理器来修改其地址

异常返回

ARM异常返回的动作(自己编写)

    1.将SPSR_<mode>的值复制给CPSR

      使处理器恢复之前的状态

    2.将LR_<mode>的值复制给PC

      使程序跳转回被打断的地址继续执行

异常优先级

多个异常同时产生时的服务顺序

    Reset

    Data Abort

    FIQ

    IRQ

    Prefetch Abort

    Software Interrupt

    Undefined instruction

FIQIRQ

nFIQ的响应速度比IRQ快

    1. FIQ在异常向量表位于最末可直接把异常处理写在异常向量表之后,省去跳转;

    2. FIQ模式有5个私有寄存器(R8-R12)执行中断处理程序前无需压栈保存寄存器,可直接处理中断;

    3. FIQ的优先级高于IRQ;

   3.1 两个中断同时发生时先响应FIQ;

   3.2 FIQ可以打断RIQ,但RIQ不能打断FIQ;

指令流水线

ARM指令流水线

    ARM7采用3级流水线

    ARM9采用5级流水线

    Cortex-A9采用8级流水线

    注:虽然流水线级数越来越多,但都是在三级流水线的基础上进行了细分 

多核处理器

    即一个SOC中集成了多个CPU核

作用

    不同的线程可以运行在不同的核心中做到真正的并发

资源

    多核处理器共用外设与接口资源

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

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

相关文章

linux 下 C++ 与三菱PLC 通过MC Qna3E 二进制 协议进行交互

西门子plc 有snap7库 进行交互&#xff0c;并且支持c 而且跨平台。但是三菱系列PLC并没有现成的开源项目&#xff0c;没办法只能自己拼接&#xff0c;我这里实现了MC 协议 Qna3E 帧&#xff0c;并使用二进制进行交互。 #pragma once#include <stdio.h> #include <std…

zTasker—简洁易用强大的定时热键一体自动化工具,效率倍增器

软件名称 zTasker 应用平台 PC Windows7及以上 一句简介 市面上定时类软件很多&#xff0c;但无一例外功能都很单一&#xff0c;要完成不同的任务&#xff0c;需要不同的软件 市面上的热键软件&#xff0c;要么功能少&#xff0c;要么像是AutoHotKey这样对于一般用户太专业…

分享篇:初识Canvas

目录 什么是Canvas&#xff1f; canvas的坐标 使用canvas的基本步骤​编辑 步骤&#xff1a; 1.需要一个canvas标签 代码演示&#xff08;方法1&#xff09; 代码演示&#xff08;方法2&#xff09; 2.需要获取 画笔 对象 &#xff08;获取 元素的 2D 上下文对象&#…

通过RSYNC在linux和windows间同步文件

通过RSYNC在linux和windows间同步文件 下载windows版本rsync下载后是一个zip的压缩包&#xff0c;直接解压就可使用配置windows到linux的秘钥拷贝公钥文件到linux服务器&#xff0c;实现免密配置同步命令结合windows计划任务实现定时同步文件 下载windows版本rsync 下载链接 h…

[kingbase运维之奇怪的现象]

#[kingbase运维之奇怪的现象] ##奇怪的现象 某银行数据中心应用反馈&#xff0c;业务接口日志记录了很多执行慢的SQL&#xff0c;出现的时间是随机的&#xff0c;单独在数据库客户端工具执行会很快返回结果。根据之前的经验推断是业务代码传入的参数类型与数据库表结构字段定义…

Kubernetes Configmap + Secret

Secret是什么&#xff1f; 在Kubernetes中&#xff0c;Secret是一种用于存储敏感信息的资源对象。它主要用于保存密码、API令牌、密钥和其他敏感数据&#xff0c;以供容器、Pod或集群中的其他资源使用。 Secret有以下特点&#xff1a; 安全存储&#xff1a;Secret对象被用于安全…

【面试必刷TOP101】合并k个已排序的链表 判断链表中是否有环

目录 题目&#xff1a;合并k个已排序的链表_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;判断链表中是否有环_牛客题霸_牛客网 (nowcoder.com) 题目的接口…

公司电脑文件加密防泄密软件系统——「天锐绿盾」

天锐绿盾是一款功能强大的公司电脑文件加密防泄密软件系统&#xff0c;旨在保护企业的知识产权和商业机密。 PC访问地址&#xff1a;http://985.so/2y2n9 它具有以下几个主要特点&#xff1a; 文件加密&#xff1a;天锐绿盾会对存储在公司电脑上的所有敏感文件进行自动加密&am…

JavaScript学习笔记02

JavaScript笔记02 数据类型详解 字符串 在 JavaScript 中正常的字符串都使用单引号 或者双引号" "包裹&#xff1a;例&#xff1a; 转义字符 在 JavaScript 字符串中也可用使用转义字符&#xff08;参考&#xff1a;详解转义字符&#xff09;&#xff1a;例&…

百度收录和权重怎么提升-网站如何获得百度权重

你是否一直苦恼于网站权重的低迷&#xff1f;不知道如何开始提升网站权重&#xff0c;缺乏优质内容更新网站。不清楚如何进行关键词优化来提升网站排名和权重。SEO是一个需要持续投入时间和资源的过程。每个网站的情况都会有所不同&#xff0c;因此所花费的时间也会有所差异。然…

android studio 找不到设备

问题描述&#xff1a; 当android studio 没有打开&#xff0c; 执行adb devices 可以查看到设备&#xff0c; 当android studio 打开&#xff0c; 执行adb devices 可以查看不到设备&#xff0c; android studio 设备管理器中也没有设备 解决方法&#xff1a; 关闭android s…

数据库_之常用API的使用

数据库_之电商API MySQL C API 使用&#xff08;基本函数&#xff09; Mysql C API函数详解 MySQL的常用API 一个常用的程序调用MySQL数据库的时候通常都会调用以下API,下面来逐个分析. mysql_init() //函数原型 MYSQL *STDCALL mysql_init(MYSQL *mysql);这个API主要是用来分…

竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…

数据分析三剑客之Pandas

1.引入 前面一篇文章我们介绍了numpy&#xff0c;但numpy的特长并不是在于数据处理&#xff0c;而是在它能非常方便地实现科学计算&#xff0c;所以我们日常对数据进行处理时用的numpy情况并不是很多&#xff0c;我们需要处理的数据一般都是带有列标签和index索引的&#xff0…

uni-app:单页面的页面切换

效果 代码 <template><view><view class"tab-bar"><text class"tab" :class"{ active: activeTab 0 }" click"changeTab(0)">页面1</text><text class"tab" :class"{ active: acti…

解锁网页开发的力量:深入探讨 JavaScript 编程

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 JavaScript 是现代网页开…

SpringBoot 整合 Websocket 通信demo (附浏览器聊天窗口)

1. 依赖 <!-- SpringBoot WebSocket --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>2. 自动注册配置类 import org.springframework.context…

巨人互动|Google海外户Google排名算法机制

谷歌是目前最流行的搜索引擎之一&#xff0c;它的排名算法机制是谷歌搜索引擎的核心。谷歌的排名算法机制可以分为两个部分&#xff1a;计算网页相关度和排序结果。 一、计算网页相关度 谷歌通过计算每个页面的相关度来确定搜索结果的优先级。相关度是根据页面上的关键词、图…

【Java从入门到精通】这也许就是Java火热的原因吧!

前言&#xff1a;Java是一种高级的、面向对象的、可跨平台的程序设计语言。Java根据技术类别可划分为以下几类&#xff1a;JavaSE&#xff08;Standard Edition&#xff0c;标准版&#xff09;&#xff1a;支持面向桌面、嵌入式和移动设备的应用程序开发&#xff1b;JavaEE&…

input子系统框架、外设驱动开发

一、input子系统基本框架 Linux内核为了两个目的&#xff1a; 简化纯输入类外设&#xff08;如&#xff1a;键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等&#xff09;的驱动开发统一输入类外设产生的数据格式&#xff08;struct input_event&#xff09;&#xff0c;更加方…