【ARM】02.中断与异常

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

中断与异常

包含arm中断、单片机中断、Linux中断。结合【Linux内核驱动中的中断机制】一起看

27.中断分为哪两种?

(1)异步中断:也叫外部中断中断,指外部硬件产生的一个电信号从CPU的中断引脚进入,打断CPU的运行。由CPU外设产生的电信号,其发生时间不可预估。其引入是为了支持CPU和设备之间的并行操作。由 CPU 执行指令以外的事件引起,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。

(2)同步中断:也叫内部中断异常,指软件运行过程中发生了一些必须作出处理的事件,CPU自动产生一个陷入来打断CPU的运行。 异常在处理的时候必须考虑与处理器的时钟同步,实际上异常也称为同步中断,在处理器执行到因编译错误而导致的错误指令时,或者在执行期间出现特殊错误,必须靠内核处理的时候,处理器就会产生一个异常。由CPU内部产生的电信号,其特点是当前指令执行完才产生中断。其引入是为了表示CPU执行时本身出现的问题。由 CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。

28.中断与DMA有何区别?

DMA:是一种无须CPU的参与,就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用 DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。 中断:是指CPU在执行程序的过程中,出现了某些突发事件时,CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回源程序被中断的位置并继续执行。 所以中断和DMA的区别就是:DMA不需CPU参与,而中断是需要CPU参与的。

29.简述处理器中断产生和处理的过程。

处理器在中断处理的过程中,一般分为以下几个步骤:中断请求 -> 中断响应 -> 保护现场 -> 中断服务 -> 恢复现场 -> 中断返回。

arm对异常(中断)处理过程

① 初始化:

a. 设置中断源,让它可以产生中断

b. 设置中断控制器(可以屏蔽某个中断,优先级)

c. 设置CPU总开关(使能中断)

② 执行其他程序:正常程序

③ 产生中断:比如按下按键--->中断控制器--->CPU

④ CPU 每执行完一条指令都会检查有无中断/异常产生

⑤ CPU发现有中断/异常产生,开始处理。

对于不同的异常,跳去不同的地址执行程序。

这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向量。

③④⑤都是硬件做的。

⑥ 这些函数做什么事情?

软件做的:

a. 保存现场(各种寄存器)

b. 处理异常(中断):

分辨中断源,再调用不同的处理函数

c. 恢复现场

各种中断源发出的中断信号,汇聚到中断控制器,CPU可以读取中断控制器的寄存器,判断当前处理的是哪个中断,中断控制器有多种实现,比如NVIC,GIC。CPU每执行完一条指令,都会判断一下是否有中断发生了,有中断就会根据中断种类在中断向量表中找到中断处理函数,保存现场后跳到中断处理函数执行。执行完恢复现场。

GIC有三种中断类型软件触发中断、私有外设中断、共享外设中断。

30.中断服务程序的一般结构为:

1)保护现场。 在中断服务程序的起始部分安排若干条入栈指令,将各寄存器的内容压入堆栈保存。

2)开中断。 在中断服务程序执行期间允许级别更高的中断请求中断现行的中断服务程序,实现中断嵌套。

3)中断服务。 完成中断源的具体要求。

4)恢复现场。 中断服务程序结束前,必须恢复主程序的中断现场。通常是将保存在堆栈中的现场信息弹出到原来的寄存器中。

5)中断返回。 返回到原程序的断点处,继续执行原程序。

31.保护现场、恢复现场的过程?

保护现场

①首先将R0 ~ R7(快速中断)或R0 ~ R12(其他中断)PUSH进堆栈中保存,并将堆栈指针保存在对应中断模式的R13(SP)中。

②把即将执行的下一条指令(PC-4)的地址保存到对应中断模式的R14(LR)中;

把CPSR的值保存到对应中断模式的SPSR中,以实现对处理器当前状态、中断屏蔽及各标志位的保护。

③设置CPSR的相应位:设置CPSR[4:0]的5位以进入相应的工作模式;CPSR[5] = 0切换到ARM状态;设置CPSR[7] = 1禁止IRQ中断;如果进入复位模式或FIQ模式,还要设置CPSR[6] = 1以禁止FIQ中断。

④给程序计数器PC强制赋值,转入中断向量地址,执行相应的中断服务程序。

恢复现场

①将原来保存在堆栈中的R0R12或R0R7 POP出栈,赋值给相应的寄存器。

②将LR的值赋值给PC,将SPSR的值赋值给CPSR中,恢复被中断的程序状态。

32.当一个异常出现以后,ARM微处理器会执行哪几步操作?
  1. 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,则LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+ 8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量, 这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令 MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。
  2. 将CPSR复制到相应的SPSR中。
  3. 根据异常类型,强制设置CPSR的运行模式位。
  4. 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

总结,中断和异常执行步骤差不多,保存相应寄存器和状态,从中断/异常向量表跳转到处理程序,单片机中会有中断优先级,中断嵌套等概念,Linux内核中断机制会有上下半部。

33.中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?

中断是CPU处于被动状态下来接受设备的信号,而轮询是CPU主动去查询该设备是否有请求。 凡事都是两面性,所以,看效率不能简单的说那个效率高。如果是请求设备是一个频繁请求cpu的设备,或者有大量数据请求的网络设备,那么轮询的效率是比中断高。如果是一般设备,并且该设备请求 cpu的频率比较低,则用中断效率要高一些。主要是看请求频率。

34.为什么FIQ比IRQ要快?
  1. ARM的FIQ模式提供了更多的banked寄存器,r8到r14还有SPSR,而IRQ模式就没有那么多,R8,R9,R10,R11,R12对应的banked的寄存器就没有,这就意味着在ARM的IRQ模式下,中断处理程 序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存器,模式切换时CPU自动保存这些值到banked寄存器,退出 FIQ模式时自动恢复,所以这个过程FIQ比IRQ快.不要小看这几个寄存器,ARM在编译的时候,如果你FIQ中断处理程序足够用这几个独立的寄存器来运作,它就不会进行通用寄存器的压栈,这样也省了一些时间。
  2. FIQ比IRQ有更高优先级,如果FIQ和IRQ同时产生,那么FIQ先处理。
  3. 在symbian系统里,当CPU处于FIQ模式处理FIQ中断的过程中,预取指令异常,未定义指令异常, 软件中断全被禁止,所有的中断被屏蔽。所以FIQ就会很快执行,不会被其他异常或者中断打断, 所以它又比IRQ快了。而IRQ不一样,当ARM处理IRQ模式处理IRQ中断时,如果来了一个FIQ中断 请求,那正在执行的IRQ中断处理程序会被抢断,ARM切换到FIQ模式去执行这个FIQ,所以FIQ比 IRQ快多了。
  4. 另外FIQ的入口地址是0x1c,IRQ的入口地址是0x18。写过完整汇编系统的都比较明白这点的差别, 18只能放一条指令,为了不与1C处的FIQ冲突,这个地方只能跳转,而FIQ不一样,1C以后没有任何中断向量表了,这样可以直接在1C处放FIQ的中断处理程序,由于跳转的范围限制,至少少了一 条跳转指令。
35.外部中断请求(IRQ)和快速中断请求(FIQ)的异常向量地址分别为?

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

0x00000018、0x0000001C。

36.复位中断与其他中断有什么不同?

当中断产生后,复位中断立即中止当前指令的执行,其余情况都是当处理器完成当前指令后,再去响应中断。

如果是复位中断,系统自动从0x00000000开始重新执行程序,无需中断返回。

37.什么是中断向量?什么是中断嵌套?

中断向量:中断服务子程序的入口地址。

中断嵌套:中断系统正在执行一个中断服务程序时,有另一个优先级更高的中断源提出请求,这时会暂停当前正在执行的级别较低的中断源的服务程序,处理级别更高的中断源。处理完毕后再返回到被中断了的中断服务程序。

38.中断的优缺点?

优点:实现CPU和I/O设备的并行,提高CPU的利用率和系统的性能。

缺点:中断处理过程需要保护现场、恢复现场,整个过程需要一定的时间和空间开销。如果中断的频率太高,会降低系统的性能。

39.中断服务程序能不能有参数和返回值?

在单片机裸机程序中,中断服务程序既不能有参数,也不能有返回值。

但是在带操作系统的嵌入式系统中,中断服务程序可以有参数,也可以有返回值。

40.中断

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【嵌入式八股】三、硬件篇 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇【本专栏】 4.嵌入式Linux (建议PC端查看)

全部评论

相关推荐

不愿透露姓名的神秘牛友
01-07 07:54
已编辑
点赞 评论 收藏
分享
评论
6
4
分享

创作者周榜

更多
牛客网
牛客企业服务