ARM异常向量表详解

(23) 2024-03-25 22:01:01

ARM指令是三级流水线

就是说取指,译指,执行时同时执行的

这样说吧,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(假设在ARM状态下,一个指令占4个字节),cpu正在执行的指令地址是PC-8.

比如有一个向量表定义如下:

unsigned int const vecTbl[16] @".arm_vectors" =

{

0xE59FF018,

0xE59FF018,

0xE59FF018,

0xE59FF018,

0xE59FF018,

0xE59FF018,

0xE59FF018, // LDR PC,[PC,0x18] 若产生IRQ,CPU取指此处PC,正在执行指令为PC-8;

// 实际取指PC应该是 PC+8+0x18 = PC+0x20 ==>OS_CPU_ARM_ExceptIrqHndlr,也就是下一执行的PC

0xE59FF018,

(unsigned int) Entry,

(unsigned int) OS_CPU_ARM_ExceptUndefInstrHndlr, //未定义

(unsigned int) OS_CPU_ARM_ExceptSwiHndlr, //软中断

(unsigned int) OS_CPU_ARM_ExceptPrefetchAbortHndlr, //预取址

(unsigned int) OS_CPU_ARM_ExceptDataAbortHndlr, //数据

(unsigned int) Entry,

(unsigned int) OS_CPU_ARM_ExceptIrqHndlr, //IRQ

(unsigned int) OS_CPU_ARM_ExceptFiqHndlr //FIQ

};

CPSR
ARM异常向量表详解 (https://mushiming.com/)  第1张

ARM异常向量表详解 (https://mushiming.com/)  第2张

THE END

发表回复