ARM体系的异常中断

在ARM体系中,通常有3种方式控制处理器的流程

   1:在正常执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加四个字节,在每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节,整个过程是按照顺序执行的  

  
2:通过跳转指令,程序可以跳转到指定的地址标号进行执行,或者跳转到特定的子程序进行执行,其中B指令用于执行跳转操作,BL指令用于执行跳转操作的同时,保存子程序相应的返回地址,BX在执行跳转操作的同时,分居目标地址的最低位,可以将程序切换到THumb状态,BLX执行上述三个操作

  
3:当异常中断发生时,系统执行当前指令后,将跳转到相应的异常中断处理程序进行执行,当异常处理中断执行完成之后,程序返回到发生中断的下一条指令出继续执行,在进入异常中断处理程序的时候,要保存被中断程序的执行现场,在从异常中断程序退出时,要恢复被中断的程序的执行现场

ARM处理器对异常中断的响应

  1保存处理器当前的状态,中断屏蔽位,以及各条件标志位,这是通过当前程序状态寄存器CPSR的内容保存到要自信的异常中断对应的SPSR寄存器中实现的

  2设置当前程序状态寄存器的相应的位,包括CPSR中的位,是处理器进入相应的执行模式,设置CPSR中的位,进制IRQ中断,但进入FIQ是,进制FIQ中断

  3将寄存器设置成返回地址

  4将程序计数器PC,设置长异常中断的中断向量地址,从而跳转到相应的异常中断进行处理

从异常中断处理中返回

  1恢复被中断的程序的处理器后状态,讲SPSR_mode寄存器内容复制到CPSR

  2返回到发生异常中断的指令的下一条指令执行,讲IR_MODE中的内容复制到PC

  3复位和异常中断不需要返回,程序计数器PC所指向的不同的异常中断是不同的

转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3724801.html

ARM体系的异常中断,布布扣,bubuko.com

时间: 2024-12-15 05:38:55

ARM体系的异常中断的相关文章

软件和硬件都是对生活的高度抽象---论中断控制(ARM体系编程)

不同的芯片体系设计在集成电路系统设计阶段其实都遵循大体一致的设计思想,芯片设计发展那么多年,真正为人所熟知的就是X86架构和ARM架构,当然还有日渐没落的MIPS,其他都是一些简单的控制器芯片体系.而硬件模块设计又是高度抽象于现实需求,很多时候,X86.ARM和MIPS只有底层寄存器和指令级别的差异,对于软件驱动基本是一致的.本文论及ARM体系的中断控制,以基于Cortex A8的S5PV210为例.中断是一种异步工作机制,也是嵌入式处理器的一个核心工作机制,对于实时操作系统来说必不可少. 1.

ARM异常中断返回的几种情况

ARM异常中断返回的几种情况重要基础知识:R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令.一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此 PC总是指向第三条指令.当 ARM 状态时,每条指令为 4 字节长,所以 PC 始终指向该指令地址加 8 字节的地址,即:PC 值=当前程序执行位置+8: 而 ADS 中的 pc,是为了调试看着方便而修改过的,它指向的是正在执行的指令,即“真正 pc-8”! 1.SWI 和和未定义

ARM七种异常源和异常处理流程(四大步三小步)

ARM七种异常源和异常处理流程 2014-11-30  北京海淀区  张俊浩 ARM七种异常源及其工作模式                                                                                             异常源                                              含义                      ARM工作模式                        

(转)ARM体系中字、半字和字节,ARM指令字对齐半字对齐

原文传送门 字(Word):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位. 半字(Half-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致. 字节(Byte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位. ARM指令字对齐:32位地址对应的地址空间是2 32 个8位字节,若初始地址为0x00000000,按字对齐下一条地址应为0x00000004.0x00000000~0x00

配置恢复出发异常中断的解析

在我最近的一次项目中,要实现设备在启动时,恢复上次配置的时候,我将配置恢复的功能实现在内核态, 虽然最后配置恢复下刷芯片等功能完全没有问题,但导致ping直连延时以及tftp下载上传速率很慢: 下面介绍我处理这个问题所经历的几个阶段: 1.由于刚开始的时候没有意识到这个问题,再后来的测试中,也一直以为是是由于端口的能力及达不到才导致这种情况: 2.针对这种情况,我竟版本回退,然后依据二分法的方式测试那个版本出了问题,最终确定,虽然端口的能力级比较低, 但是速率不会很慢以及ping直连不会延时很大

Supervisor的作用与配置:实现对异常中断的子进程的自动重启

supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动, 所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了. 此时被管理进程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息, 通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启. 安装supervisor $ sudo apt-get install super

ARM中的异常和中断

ARM中有5种异常模式,有7种中断源.这7种中断源中有些中断是我们希望发生的,但有些中断是我们不希望发生的. 我们希望发生的中断: 软中断:属于svc模式,通过SWI指令便可以产生软中断,进入到svc模式. irq中断:属于irq模式,当产生普通的外部中断时,处理器便进入到IRQ模式. fiq中断:属于fiq模式,当产生高优先级外部中断时,处理器便进入到FIQ模式. 我们不希望发生的中断: 复位:属于svc模式,当系统上电时便会产生复位中断,系统进入到svc模式.复位中断不需要中断返回. 取指中

s3c2440裸机-异常中断(二. und未定义指令异常)

1._und(未定义指令异常)介绍 我们之前分析过5种异常,那么如何进入未定义指令异常,当然是cpu读取指令发生异常,出现了指令解析异常. 我们先来看下当cpu解析到什么样的指令才会触发未定义指令异常呢? 从上面的arm指令格式中可知,只要指令码属于划线的格式,就属于未定义指令异常. 2.汇编向c函数传参 我们知道汇编给C语言函数传参是通过r0,r1,...通过堆栈的方式去传递的参数,比如r0=1, r1=2;那么在被调用的c函数中argv0就是r0, argv1就是r1...,那么我们如果通过

Unity3D mono arm 非要吃中断 33

现在也不到有多少游戏是 Unity3D 写的 操作倒是很省事,在Unity中写了程序,直接生成了 Android的 APK 但内部其实还是听复杂的,对于用 C#生成的脚本需要用 mono 来解释执行 而Android应用本来就是运行在Dalvik Java 虚拟机, 就是经过了两层 runtime 才运行 不过我们更"变态",我们想在qemu-arm ( 主机是x86)  中运行带 mono 的Unity程序 结果遇到个问题 mono 报错 mono : * Assertion at