1.ARM的异常向量表地址不是一般都是在0x00000000或者0xffff0000吗?为何S5PV210的异常向量表地址在0xd0037400?
2.一般异常向量表不是一条跳转指令吗?为何S5PV210的存储的直接是异常处理函数的地址?
求大家赐教,小弟感激不尽
代码:
#define _Exception_Vector 0xD0037400
#define pExceptionRESET ( *((volatile unsigned long *)(_Exception_Vector + 0x0)) )
#define pExceptionUNDEF ( *((volatile unsigned long *)(_Exception_Vector + 0x4)) )
#define pExceptionSWI ( *((volatile unsigned long *)(_Exception_Vector + 0x8)) )
#define pExceptionPABORT ( *((volatile unsigned long *)(_Exception_Vector + 0xc)) )
#define pExceptionDABORT ( *((volatile unsigned long *)(_Exception_Vector + 0x10)) )
#define pExceptionRESERVED ( *((volatile unsigned long *)(_Exception_Vector + 0x14)) )
#define pExceptionIRQ ( *((volatile unsigned long *)(_Exception_Vector + 0x18)) )
#define pExceptionFIQ ( *((volatile unsigned long *)(_Exception_Vector + 0x1c)) )
void system_initexception(void)
{
//设置中断向量表
pExceptionUNDEF = (unsigned long)exceptionundef;
pExceptionDABORT = (unsigned long)exceptiondabort;
pExceptionPABORT = (unsigned long)exceptionpabort;
pExceptionSWI = (unsigned long)exceptionswi;
pExceptionFIQ = (unsigned long)IRQ_handle;
pExceptionIRQ = (unsigned long)IRQ_handle;
}
------解决方案--------------------
我的看法首先FFFF0000是虚拟地址,看看您的地址#define _Exception_Vector 0xD0037400 是否是虚拟地址或者物理地址,然后向量表里面存放是的确是跳转指令,内核代码我也没看。。。。希望对你有帮助。。