文章目录

  • 1.1 IRQ 与 FIQ 区别
    • 1.1.1 ARMv7 中断向量表
    • 1.1.2 FIQ 与 IRQ 差异
    • 1.1.3 Linux 禁用 FIQ
  • 1.2 ARMv8 FIQ 介绍

1.1 IRQ 与 FIQ 区别

1.1.1 ARMv7 中断向量表

向量表中保存了一系列的跳转指令,当系统发生异常时,由处理器负责将程序执行流转到向量表中的跳转指令,最常见的就是中断向量,应用工程师只需要使用固定的函数名编写中断处理程序,在中断发生时该中断处理程序就会被自动调用,这背后的实现就是中断向量表的功劳。

armv7 中,中断向量表可以设置在两个地址:0x000000000xffff0000,由协处理器 cp15SCTLRbit13 来控制,默认情况下,中断向量表的位置在 0x00000000,实际上,对于操作系统而言,比如 linux,会更倾向于将中断向量表放在 0xffff0000 处,因为 0x0 处在用户空间下,需要额外做一些限制,而 0xffff0000 处在内核空间,另一方面,0 地址通常是 NULL 指针访问的地址,这需要 MMU 做相应的访问限制规则,总之,将向量表放在高地址处会更方便。

armv7 架构中向量表地址内容见下表:

对于ARMv7 linux 的中断向量表的定义在 arch/arm/kernel/entry-armv.S 中:

.L__vectors_start:W(b)    vector_rst    /* reset mode */W(b)    vector_und    /* undefined mode */W(ldr)  pc, .L__vectors_start + 0x1000    /* svc mode */W(b)    vector_pabt    /* abort mode (prefetch abort) */W(b)    vector_dabt    /* abort mode (data abort) */W(b)    vector_addrexcptn  /* unused */W(b)    vector_irq    /* irq mode */W(b)    vector_fiq    /* fiq mode */

当对应的 exception event 发生时,系统会自动地修改 CPSR 状态寄存器,并跳转到上表中的地址执行指令,而软件上要做的,就是在该地址上放置对应的代码,除了 FIQ 之外,其它模式对应的都是一条跳转指令,如果存放多于 4 字节的指令,将会覆盖调用后续的异常向量,因为 FIQ 是最后一条异常向量,根据其特殊性,FIQ 的处理指令可以直接放置在以 0xffff001c 处,当然,具体怎么做由软件的实现来决定。

1.1.2 FIQ 与 IRQ 差异

IRQFIQARM 处理器的两种不同编程模式(ARMv7 Cortex-A 系列 有 7 种处理模式)。
IRQ (Interrupt Request):指中断模式;
FIQ (Fast Interrupt Request):指快速中断模式。

具体差异如下

  1. 对 FIQ 来说系统必须进快处理中断请求并并快速离开这个模式;
  2. FIQ 的优先级比 IRQ 高,IRQ 可以被 FIQ 所中断,但 FIQ 不能被 IRQ 所中断;
  3. FIQ 模式下,比 IRQ 模式多了几个独立的寄存器。ARM 在编译的时候,如果 FIQ 中断处理程序足够用这几个独立的寄存器来运作,它就不会进行通用寄存器的压栈,这样也省了一些时间;
  4. FIQ 的中断向量地址在 0x0000001C,而 IRQ 的在 0x00000018。(也有的在FFFF001C 以及 FFFF0018)。0x18 只能放一条指令,为了不与 0x1C 处的 FIQ 冲突,这个地方只能跳转,而 FIQ 不一样,0x1C 以后没有任何中断向量表了,这样可以直接在 0x1C 处放 FIQ 的中断处理程序,由于跳转的范围限制,至少少了一条跳转指令;
  5. IRQ 和 FIQ 的响应延迟有区别,IRQ 的响应并不及时, 会延迟几个指令周期才跳转到中断向量处,应该是在等预取的指令执行完。

1.1.3 Linux 禁用 FIQ

FIQ 在 linux 中并没有使用到,如上节内容提到的 FIQ 相对于 IRQ 而言,FIQ 拥有更高的优先级,它可以抢占 IRQ 的执行,同时 FIQ 本身的执行速度比 IRQ 要快一些,这类中断通常用在对响应时间有极高要求的系统中,比如 armv7-R 系列的处理器中会使用到。FIQ 的快速执行一方面体现在它有更高的优先级,另一方面,它拥有单独的寄存器,省去了参数的压栈时间,且处于中断向量表的最后一项,其执行代码不需要经过跳转。

至于为什么 linux 中不使用 FIQ,同时禁止 IRQ 中断的嵌套,这是因为支持中断的嵌套会给系统带来更大的复杂性,同时,过多中断的嵌套很可能导致栈的溢出,另一方面,随着硬件的发展,系统性能的瓶颈并不受限于中断的处理,当然,禁止 FIQ 以及中断的嵌套会略微地降低实时性,但是明显它带来的那点实时性提升并不足以弥补它所带来的缺点,两相权衡之下,在新版的内核中便取消了中断嵌套的支持(老版本中是支持的)。

1.2 ARMv8 FIQ 介绍

TODO

推荐阅读
https://zhuanlan.zhihu.com/p/362717490

【ARMv8 异常模型入门及渐进 9 - FIQ 和 IRQ 区别】相关推荐

  1. 【ARMv8 异常模型入门及渐进2 - 系统寄存器访问方法:op1,CRn,CRm,op2】

    文章目录 1.1 ARMv8 系统寄存器访问概要 1.1.1 系统寄存器访问级别 1.1.2 ARMv8 系统寄存器编码 1.1 ARMv8 系统寄存器访问概要 ARMv8中,取消了协处理器,之前协处 ...

  2. fiq中断的入口地址_FIQ和IRQ区别

    FIQ 和 IRQ 区别 FIQ 和 IRQ 是两种不同类型的中断, ARM 为了支持这两种不同 的中断,提供了对应的叫做 FIQ 和 IRQ 处理器模式( ARM 有 7 种处 理模式) .一般的中 ...

  3. 从LeNet-5 CNN模型入门PyTorch

    从LeNet-5 CNN模型入门PyTorch 1. PyTorch 准备 1.1 PyTorch特点 1.2 PyTorch安装测试 2. 完整代码 2.1 LeNet模型 2.2 训练 2.2 测 ...

  4. STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(3):Cortex-M3处理器异常模型

    这一部分描述异常模型. 每一个异常都存在一个状态: 闲置       这个异常没有活跃,没有暂停 待进行    异常等待被处理器服务.一个外设或软件中断请求可以改变相应中断的状态到即将发生状态. ·活 ...

  5. 因果模型一:因果模型入门综述

    因果模型一:因果模型入门综述 一. 为什么要研究因果模型? 二. 因果研究的发展历程 1. C.G. Hempel 1984--因果研究的分水岭 2. 统计相关性模型 3. 虚假原因 三.INUS条件 ...

  6. 第19章 随机波动率模型入门

    这学期会时不时更新一下伊曼纽尔·德曼(Emanuel Derman) 教授与迈克尔B.米勒(Michael B. Miller)的<The Volatility Smile>这本书,本意是 ...

  7. 为什么 FIQ 比 IRQ 的响应速度更快?

            目录 1.FIQ在异常向量表位于最末 2.FIQ模式有5个私有寄存器 3.FIQ的优先级高于IRQ 1.FIQ在异常向量表位于最末 一般来说,处理器跳转到异常向量表以后,会根据当前的异 ...

  8. FIQ和IRQ的区别及CPU实现

    FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式). 一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ ...

  9. IRQ中断与FIQ中断的区别

    在学习嵌入式的时候中断是我们必须要了解的东西. 首先我们要知道什么是中断,中断的概念(可看可不看,重要的是理解)是指半中间发生阻隔.停顿或故障而断开.其实中断也是异常的一种,只是是一种人为可控的异常. ...

最新文章

  1. MySQL Antelope和Barracuda的区别分析
  2. ip and port check 正则
  3. mysql出现多线程操作同一个表的情况,应该怎么办?
  4. Tomcat 安装与使用
  5. 向朋友借钱:文章值得一读,让人思索良久
  6. Oracle01877,Cognos错误:RQP-DEF-0177 执行操作“sqlOpenResult”(状态为“-28”)时出错...
  7. shell 应用场景及工作原理
  8. 11-6-线程的概念
  9. python 菜鸟-Python 元组
  10. 数据库db2错误代码大全
  11. Unicode与GBK互转
  12. 最新《圣思园JavaSE实地培训系列教程》
  13. hdjs-图片 文件上传
  14. 美团8年经验之谈,测试工程师如何进阶(自动化、性能、测开)
  15. springboot+社区购物小程序 毕业设计-附源码291720
  16. bp是什么意思贷款利率,lpr+bp利率是什么意思
  17. 流量不清零、可转赠,对运营商未必是坏事
  18. 基于知识图谱推荐系统
  19. 程序人生hello-P2P
  20. Holm–Bonferroni method

热门文章

  1. 正则——只能允许是汉字、拼音和数字的正则表达式
  2. 易经八卦在程序世界中的体现
  3. C++ signed 与 unsigned
  4. 从 0 搭建 Spring Cloud 服务,完整教程!
  5. svn: E170001: 认证失败--文件夹不存在
  6. tvs管参数数解读_关于TVS管选型的几个参数 2019-01-19
  7. Hack The Box——Scavenger
  8. mysql的redo与undo
  9. mac软件卸载不干净怎么回事 mac如何卸载软件干净
  10. 200行纯C++代码构建一个捕鱼游戏「源码已打包」