12.4 ARM异常处理

这篇具有很好参考价值的文章主要介绍了12.4 ARM异常处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

ARM异常处理(一)

异常

概念

异常处理机制

ARM异常源

概念

ARM异常源

ARM异常模式

ARM异常处理(二)

ARM异常响应

异常向量表

异常返回

IRQ异常举例​编辑

ARM异常处理(三 )

异常优先级

FIQ和IRQ

ARM微架构

流水线

指令流水线

ARM指令流水线

PC的作用(取指)

多核处理器

多核处理器

作用

资源


ARM异常处理(一)

异常
概念

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

12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 文章来源地址https://www.toymoban.com/news/detail-622610.html

异常程序也是一段程序,如信号,网卡传输的数据拆包,像游戏中加减声音按键,由于速度很快,所以不被人所感知

异常处理机制

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

ARM异常源
概念

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

ARM异常源

FIQ 快速中断请求引脚有效【一般由外部硬件产生,如网卡】

IRQ 外部中断请求引脚有效【一般由外部硬件产生,如网卡】

Reset 复位电平有效【复位】

Software Interrupt 执行swi指令【一般由软件或指令产生】

Data Abort 数据终止【如读取数据时,地址出错】

Prefetch Abort 指令预取终止【取指令时出错】

Undefined Instruction 遇到不能处理的指令【指令未定义】

以上七种为异常源与异常模式不同

ARM异常模式

异常模式

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

异常源 FIQ IRQ Reset/SWI Data Abort/Prefetch Abort Undef Instruction
异常模式 FIQ IRQ SVC Abort Undef

ARM异常处理(二)

ARM异常响应

12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 

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

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

SPSR(Saved Program Status Register)是ARM架构中的一个寄存器,用于保存先前执行状态的副本。它是一个特殊的寄存器,与CPSR(Current Program Status Register)相对应。

当ARM处理器从一种处理模式(如用户模式、特权模式等)切换到另一种模式时,当前模式的CPSR的值会保存到SPSR中,以便在返回之后能够恢复执行状态。SPSR允许处理器在模式切换之间保存和恢复相关的执行状态,例如标志位、程序模式、中断使能等。

不同的处理模式(如异常模式、中断模式)都有对应的SPSR寄存器。每个模式都有一个特定的SPSR,用于保存该模式下的执行状态。当从异常或中断返回时,处理器将从相应模式的SPSR中恢复先前的执行状态。

2.修改CPSR的值

2.1.修改中断禁止位禁止相应的中断【防止同级别中断打断当前中断IRQ,但是防止不了FIQ,CPSR[7]】

2.2.修改模式位进入相应的异常模式【CPSR[0:3]】

2.3.修改状态位进入ARM状态【处理异常时必须在ARM状态下,CPSR[5]】

3.保存返回地址到对应异常模式下的LR_<mode>【链接寄存器】

4.设置PC为相应的异常向量(异常向量表对应的地址)

异常向量表

异常向量表

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

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

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

因为异常向量表空间有限一般我们不会再这里写异常处理程序,而是在对应的位置写一条跳转指令使其跳转到指定的异常处理程序的入口 注:ARM的异常向量表的基地址默认在0x00地址但可以通过配置协处理器来修改其地址

12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 

异常返回

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

1.将SPSR<mode>的值复制给CPSR 使处理器恢复之前的状态

2.将LR_<mode>的值复制给PC 使程序跳转回被打断的地址继续执行

IRQ异常举例12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

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

ARM异常处理(三 )

异常优先级

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

Reset 复位

Data Abort

FIQ 硬件 优先级更高

IRQ 硬件 优先级略低

Prefetch Abort

Software Interrupt

Undefined instruction

FIQ和IRQ

FIQ的响应速度比IRQ快

FIQ在异常向量表位于最末

可直接把异常处理写在异常向量表之后,省去跳转,可以直接写

FIQ模式有5个私有寄存器(R8-R12)

执行中断处理程序前无需压栈保存寄存器,可直接处理中断

FIQ的优先级高于IRQ

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

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

ARM微架构

流水线

12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 

指令流水线

1.取址:指令计数器PC 指令寄存器IR 【N】

2.译码:指令译码器 【N-4】

3.执行:运算器寄存器 【N-8】

12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 

ARM指令流水线

ARM7采用3级流水线

ARM9采用5级流水线

Cortex-A9采用8级流水线

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

PC的作用(取指)

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

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

12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 

多核处理器
多核处理器

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

作用

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

资源

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

12.4 ARM异常处理,从零开始学嵌入式-12.ARM体系结构与接口技术,arm开发

 

到了这里,关于12.4 ARM异常处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARM 嵌入式 C 入门及渐进 12 --寄存器位清0和置位函数实现】

    在 C 语言中,可以使用宏定义来创建用于清除(清零)或设置(置一)32位地址中特定位的函数。以下是两个宏定义的示例: 这里的 addr 是指向目标32位地址的指针, bit 是需要操作的位的索引(从0开始计数)。 示例使用方式 假设要操作的是一个具有可读写属性的寄存器,它

    2024年03月22日
    浏览(58)
  • 【ChatGPT】从零开始构建基于ChatGPT的嵌入式(Embedding) 本地(Local) 智能客服问答机器人模型

      目录 方案流程 1. Embeddings 介绍 术语:微调 vs 嵌入

    2024年02月10日
    浏览(54)
  • 嵌入式ARM设计编程(三) 处理器工作模式

    文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 (1) 通过实验掌握学会使用msr/mrs 指令实现ARM 处理器工作模式的切换,观察不同模式下的寄存器,加深对CPU 结构的理解; (2) 通过实验掌握ld 中如何使

    2024年02月03日
    浏览(66)
  • 【小黑嵌入式系统第二课】嵌入式系统的概述(二)——外围设备、处理器、ARM

    板级支持包(BSP) 是商用嵌入式操作系统实现可移植性所采用的一种方案,是硬件抽象层的一种实现。BSP是介于硬件和操作系统中驱动层程序之间的一层,有时也可认为属于操作系统一部分。BSP实现了对操作系统的支持,为上层的驱动程序提供访问硬件设备的函数包。 BSP隔离了

    2024年04月17日
    浏览(69)
  • 【小黑嵌入式系统第二课】嵌入式系统的概述(二)——外围设备、处理器、ARM、操作系统

    上一课: 【小黑嵌入式系统第一课】嵌入式系统的概述(一)——概念、特点、发展、应用 下一课: 【小黑嵌入式系统第三课】嵌入式系统硬件平台(一)——概述、总线、存储设备(RAMROMFLASH) 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享

    2024年02月08日
    浏览(48)
  • 【ARM 嵌入式 编译系列 2.1 -- GCC 预处理命令 #error 和 #warning 详细介绍 】

    在C语言中, #error 和 #warning 预处理指令可以用于在编译时生成错误或警告信息,通常用于调试或当代码中某些条件未满足时提醒开发者。当这些指令被编译器处理时,会自动包含出现这些指令的文件名和行号,所以你可以清楚地看到问题出现的位置。 #error 当编译器遇到 #e

    2024年01月22日
    浏览(54)
  • 嵌入式开发——ARM介绍

    ARM是一种芯片架构,由英国的ARM Holdings公司开发和授权,被广泛应用于各种嵌入式系统、移动设备和消费电子产品中。ARM架构被设计成低功耗、高性能、可定制化的特点,能够满足各种应用场景下的需求。 ARM架构主要设计了以下几个部分内容: 指令集架构 (Instruction Set Ar

    2024年02月04日
    浏览(70)
  • 嵌入式ARM设计编程(四) ARM启动过程控制

    文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 (1) 掌握建立基本完整的ARM 工程,包含启动代码,C语言程序等; (2) 了解ARM启动过程,学会编写简单的C 语言程序和汇编启动代码并进行

    2024年02月06日
    浏览(60)
  • 嵌入式学习---ARM时钟体系

    按 一定电压幅度 , 一定时间间隔 连续发出的脉冲信号。它是一个周期性的信号,每个周期内包含一个上升沿和一个下降沿。时钟脉冲的上升沿和下降沿通常用于触发和同步各个电子元件的操作,例如CPU的指令执行、数据传输、寄存器更新等。 时钟频率是指时钟脉冲的频率

    2024年01月16日
    浏览(62)
  • Layerscape® 1043A处理器:LS1043AXE7PQB、LS1043AXE8MQB、LS1043AXE8PQB、LS1043AXE8QQA面向嵌入式网络应用的64位Arm®处理器

    LS1043A处理器是推出的第一款面向嵌入式网络的四核64位Arm®处理器。LS1043A (四核版本)可通过支持无风扇设计的灵活I/O封装,提供超过10 Gbps的性能。这款SoC是专为小规格网络、工业和汽车应用而打造的解决方案,针对经济型低端PCB优化了物料成本(BOM),降低了电源成本,采用单

    2024年04月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包