1、ARM中的异常与中断总共有7种
按响应优先级从高到低 | 按中断向量表顺序 |
复位 | 复位 |
数据中止 | 未定义指令中断 |
FIQ | SWI |
IRQ | 预取指令中止 |
预取指令中止 | 数据中止异常 |
未定义指令、SWI | IRQ |
| FIQ |
ARM要求中断向量表必须放置在从0地址开始,连续8×4字节的空间内(ARM720T和ARM9、ARM10也支持从0xFFFF0000开始的高地址向量表),各异常和中断向量在向量表中的位置如下:
地址 | 中断 |
0x00 | Reset |
0x04 | Undef |
0x08 | SWI |
0x0C | Prefetch Abort |
0x10 | Data Abort |
0x14 | (Reserved) |
0x18 | IRQ |
0x2C | FIQ |
当中断产生时ARM处理器强制把PC指针置为中断向量表中相对应的向量地址。因为每个中断向量在向量表中只有一个字节的存储空间,只能存放一条指令,所以通常存放跳转指令,使程序跳转到存储器的其他地方,再执行中断处理。--这个是处理器硬件完成,软件仅参与开启关闭设置相关。
中断向量表的实现程序通常如下
AREA Boot,CODE,READONLY
ENTRY
B Reset_Handler ; Reset_Handler is a label
B Undef_Handler
B SWI_Handler
B PreAbort_Handler
B DataAbort_Handler
B ;for reserved interrupt, stop here
B IRQ_Handler
B FIQ_Handler
————————————————
版权声明:本文为CSDN博主「hudieping」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hudieping/article/details/5202243
其中的关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这段代码是冗余代码,将其优化。链接的时候要确保这段代码被连接到0地址处,并且作为整个程序的入口点(ENTRY并非总是用来设置程序的入口点的,所以通常需要在链接选项里面显式的设置程序入口点)。