4、ARM异常处理

2023-09-20 17:06:50

一、异常处理

1、异常

概念

  • 处理器在正常执行程序的过程中可能会遇到一些不正常的的事件发生,这时处理器就要将当前的程序暂停下来转去处理这个异常的事件,异常事件完成后再返回到之前被异常打断的点继续执行
    在这里插入图片描述

2、异常处理机制

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

3、ARM异常源

概念

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

ARM异常源

  • FIQ:快速中断请求有效
  • IRQ:外部中断请求有效
  • Reset:复位电平有效
  • Software Interrupt:执行swi指令
  • Data Abort:数据终止
  • Prefectch Abort:指令预取终止
  • Undefined Instruction:遇到不能处理的指令

4、ARM异常模式

  • 在ARM的基本工作模式中,有5个属于异常模式,即ARM遇到异常后会切换到对应的异常模式
    在这里插入图片描述

5、ARM异常响应

ARM产生异常之后的动作(自动完成)(四大步三小步

  • 1、拷贝CPSR的值到对应异常模式下的SPSR寄存器
  • 2、修改CPSR的值
    • 2.1、修改中断禁位,禁止相应的中断(如果需要)
    • 2.2、修改模式,进入相应的模式
    • 2.3、修改状态,进入ARM状态
  • 3、保存返回的地址到对应的异常模式下的LR寄存器
  • 4、设置PC为相应的异常向量(异常向量表对应的地址)

在这里插入图片描述

6、异常向量表

  • 1、异常向量表的本质是内存中的一段代码
  • 2、表中为每个异常源分配了4个字节的存储空间
  • 3、遇到异常后,处理器自动将PC修改为对应的地址
  • 4、因为异常向量表空间有限,一般不会再这里写异常处理程序,而是在对应的位置写一条跳转指令,使其跳转到指定的异常处理程序的入口

注:

  • ARM异常向量表的基地址默认在0x00地址,但可以通过配置协处理器来修改其地址

在这里插入图片描述

7、异常返回

异常返回的动作

  • 1、将SPSR的值复制给CPSR,使处理器恢复到之前的状态
  • 2、将LR的值复制给PC,使程序跳转回被打断的地址继续执行

在这里插入图片描述

8、IRQ异常举例

在这里插入图片描述
注:

  • 整个过程CPSR保存的永远是当前程序的状态
  • SPSR只是异常时对原来的CPSR进行备份

9、异常优先级

在这里插入图片描述

10、FIQ与IRQ

FIQ的响应速度比IRQ速度快的原因

  • 1、FIQ位于异常向量表的最末,可以直接把异常处理写在异常向量表之后,省去跳转
  • 2、FIQ有5个私有寄存器(R8-R12),执行中断处理程序之前无需压栈保存寄存器,可以直接处理中断
  • 3、FIQ的优先级高于IRQ
    • 两个中断同时发生时,先响应FIQ
    • FIQ可以打断IRQ,但是IRQ不能打断FIQ

二、ARM微架构

1、流水线

在这里插入图片描述

2、指令流水线

缩短程序执行时间,提高处理器的效率和吞吐率

ARM指令流水线:

  • ARM7采用三级流水线
  • ARM9采用5级流水线
  • Cortex-A9采用8级流水线

在这里插入图片描述
注:

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

PC的作用(取址)

  • 不管是几级流水线,PC指向的永远是当前正在取址的指令,而当前正在执行的指令的地址是PC-8

指令流水线机制的引入确实能够大大的提升指令执行的速度但在实际执行程的过程中很多情况下流水线时是无法形成的比如芯片刚上电的前两个周期、执行跳转指令后的两个周期等所以指令流水线的引入以及优化只能使平均指令周期不断的接近1而不可能真正的达到1,且流水线级数越多芯片设计的复杂程度就越高,芯片的功耗就越高

3、多核处理器

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

作用

  • 不同的线程可以运行在不同的核心中,实现真正的并发

资源

  • 多核处理器共用外设和接口资源
更多推荐

JAVA设计模式1:单例模式,确保每个类只能有一个实例

作者主页:Designer小郑作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。主打方向:Vue、SpringBoot、微信小程序本文讲解了Java设计模式中的单例模式,并给出了样例代码,单例模式,确保每个类只能有一个实例,并提供一个全局访问

Vue3自定义指令

文章目录Vue3自定义指令1.自定义全局指令v-focus2.自定义局部指令v-focus3.指令定义的钩子函数3.1概念3.2钩子函数参数3.3vnode&prevNode3.4简写3.5指令函数接受JavaScript表达式Vue3自定义指令1.自定义全局指令v-focus除了默认设置的核心指令(v-model和v

【python】入门第一课:了解基本语法(数据类型)

目录一、介绍1、什么是python?2、python的几个特点二、实例1、注释2、数据类型2.1、字符串str2.2、整数int2.3、浮点数float2.4、布尔bool2.5、列表list2.6、元组tuple2.7、集合set2.8、字典dict一、介绍1、什么是python?Python是一种通用的高级编程语言

ffmpeg安装及使用

centoslinux下安装ffmpeg1、下载解压wgethttp://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gztar-zxvfffmpeg-3.1.tar.gz2、进入解压后目录,输入如下命令/usr/local/ffmpeg为自己指定的安装目录cdffmpeg-3.1./

融云受邀参加 Web3.0 顶级峰会「Meta Era Summit 2023」

本周四19:00-20:00,融云直播课社交泛娱乐出海最短变现路径如何快速实现一款1V1视频应用?欢迎点击上方小程序报名~9月12日,由中国香港Web3.0媒体MetaEra主办的“MetaEraSummit2023”在新加坡收官,融云作为战略合作伙伴参与了峰会。关注【融云全球互联网通信云】了解更多大会以“Metave

【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本

前言🍊缘由Iphone15来了,两年之约你还记得吗?两年前,与特别的人有一个特别的约定。虽物是人非,但思念仍在。遂整合之前iphone13及iphone14的相关抢购代码,完成一个SpringBoot监听Iphone15有货邮件提醒+python自动化脚本小功能。后端基于SpringBoot,通过苹果官网进行有货接口

Vue.js vs React:哪一个更适合你的项目?

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

Spring Cloud实战案例 │ Apollo和Zuul的整合开发

Apollo是携程研发的开源配置管理中心,能够集中管理应用于不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。本案例结合一个案例介绍Apollo和Zuul的整合开发。整个应用分为4个微服务项目,分别是Eureka服务器项目mweathereurekaserver、服务提供者项

OpenSergo & Spring Cloud Alibaba 带来的服务治理能力

博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka

系列文章目录第一章Java线程池技术应用第二章CountDownLatch和Semaphone的应用第三章SpringCloud简介第四章SpringCloudNetflix之Eureka文章目录系列文章目录@[TOC](文章目录)前言1、Eureka两大组件2、Eureka服务注册与发现3、案例3.1、创建主工程3.

jq命令安装与使用

目录一、简介二、下载及安装1.Linux安装2.Windows安装3.测试安装结果三、jq用法1.基本语法2.常见用法1)格式化JSON2)获取属性3)属性不存在情况处理4)数组遍历、截取、展开5)管道、逗号、加号6)数据构造7)基础函数8)过滤、排序、分组函数9)字符串操作函数10)日期函数11)高级用法官网地址:h

热文推荐