作者:as1dzx | 来源:互联网 | 2024-11-06 12:38
在ARM架构中,异常和中断共有7种,按照响应优先级从高到低排列,分别为:复位、未定义指令、数据中止、预取指令中止、快速中断(FIQ)、软件中断(SWI)和外部中断请求(IRQ)。这些异常和中断在中断向量表中依次排列,用于系统在发生相应事件时进行快速响应和处理。
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并非总是用来设置程序的入口点的,所以通常需要在链接选项里面显式的设置程序入口点)。