ARM处理器的七种异常是严格按照顺序来放置的,那么为什么FIQ向量处于最后一个?
2个回答
展开全部
在ARM的异常向量表(如下图所示),为什么FIQ处于 异常向量表的最顶端?
——————————————————————————————————
中断向量地址 | 异常中断类型 | 异常中断模式 | 优先级(6最低) |
———————|——————— -|————————|—————————-|
0x00 | 复位 | 特权模式 | 1 |
0x04 | 未定义的指令 | UND终止模式 | 6 |
0x08 | 软件中断 | 特权模式 | 6 |
0x0C | 指令预取终止 | 终止模式 | 5 |
0x10 | 数据访问终止 | 终止模式 | 2 |
0x14 | 保留 | 未使用 | 未使用 |
0x18 | 外部中断请求 | IRQ模式 | 4 |
0x1C | 快速中断请求 | FIQ模式 | 3 |
———————————————————————————————————
在阅读了ARM的大量资料后得到的结论是:
FIQ异常向量放在所有向量最后,目的是可以将FIQ异常处理程序直接放在向量的地址上. 这样在执行FIQ处理时,就可以不用进行跳转,快速响应中断.FIQ向量放在最后,允许FIQ异常处理程序直接放在地址0x0000001C或0xFFFF001C开始 的位置,而不需要由向量的分支指令。也就是说直接从0x0000 0001C开始执行,这样省去了一个跳转指令,如果FIQ不是在顶端,那么当然需要一次跳转.
——————————————————————————————————
中断向量地址 | 异常中断类型 | 异常中断模式 | 优先级(6最低) |
———————|——————— -|————————|—————————-|
0x00 | 复位 | 特权模式 | 1 |
0x04 | 未定义的指令 | UND终止模式 | 6 |
0x08 | 软件中断 | 特权模式 | 6 |
0x0C | 指令预取终止 | 终止模式 | 5 |
0x10 | 数据访问终止 | 终止模式 | 2 |
0x14 | 保留 | 未使用 | 未使用 |
0x18 | 外部中断请求 | IRQ模式 | 4 |
0x1C | 快速中断请求 | FIQ模式 | 3 |
———————————————————————————————————
在阅读了ARM的大量资料后得到的结论是:
FIQ异常向量放在所有向量最后,目的是可以将FIQ异常处理程序直接放在向量的地址上. 这样在执行FIQ处理时,就可以不用进行跳转,快速响应中断.FIQ向量放在最后,允许FIQ异常处理程序直接放在地址0x0000001C或0xFFFF001C开始 的位置,而不需要由向量的分支指令。也就是说直接从0x0000 0001C开始执行,这样省去了一个跳转指令,如果FIQ不是在顶端,那么当然需要一次跳转.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询