本人新手,见笑了!
.extern main
.text
.global _start
_start:
@******************************************************************************
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************
b Reset
@ 0x04: 未定义指令中止模式的向量地址
HandleUndef:
b HandleUndef
@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
b HandleSWI
@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
b HandlePrefetchAbort
@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort:
b HandleDataAbort
@ 0x14: 保留
HandleNotUsed:
b HandleNotUsed
@ 0x18: 中断模式的向量地址
b HandleIRQ
@ 0x1c: 快中断模式的向量地址
HandleFIQ:
b HandleFIQ
这是中断向量表的设置!0x0,0x4,.....,0x1c都是对应的中断,在这里系统复位后会自动从0x0运行!
传闻中断向量表的设置是不能变的,它放在Rom的0的位置,0x0始终代表复位,0x4始终代表Undef,......
我在想,这里要是改改,改成:
.extern main
.text
.global _start
_start:
@******************************************************************************
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************
b Reset
@ 0x04: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
b HandleSWI
@ 0x08: 未定义指令中止模式的向量地址
HandleUndef:
b HandleUndef
那难道说0x4既变成了SWI了?
本人愚钝,望各位指点一二,不胜感激。
这样改的结果是:发生未定义指令异常时,会跳到你的"HandleSWI"去,至于你的"HandleSWI"是做什么的,处理器是不会管的
哦,原来处理器人的地址是定死了的啊。谢谢了。。呵呵
是的,处理器只知道出现异常跳到固定的位置,它才不管你在那里写什么呢。
恩,很好,很强大。。麻烦各位去看看我的例外一个问题啊。谢谢了