谁能给个ARM 软件中断处理程序 (SWI handler)的例子,可以双倍SVC模式下的寄存器数,并且返回USER模式,好像是用一个什么SWI call触发这个中断程序的 求哪位高手给个例子 谢谢!
如果不是技术上的探讨,建议在百度+Google上找答案!^_^,你想要的我没有…
只是我写的,可以重入,当然就可以返回USR。但是我不明白什么叫“可以双倍SVC模式下的寄存器数”
IMPORT C_IsrSWI
IsrSWI
STMFD sp!,{r0-r3,r12,lr};//保存寄存器,防止重入SWI时被破坏
MOV r1,sp ;//把指针存放在R1,并作参数传递
MRS r0,spsr
STMFD sp!,{r0} ;//保存spsr
TST r0,#Tbit
LDRNEH r0,[lr,#-2]
BICNE r0,r0,#0xFF00
LDREQ r0,[lr,#-4]
BICEQ r0,r0,#0xFF000000
BL C_IsrSWI
LDMFD sp!,{r0}
MSR spsr_cf,r0
LDMFD sp!,{r0-r3,r12,pc}^
IMPORT C_IsrSWI 这个C_IsrSWI是什么?
还有貌似 TST r0,#Tbit 编译报错了 为什么?
谢谢!
这个代码应该是 2 楼自己某个应用上的吧
IMPORT C_IsrSWI 很明显是引入 C 程序里的软中断处理函数,
从代码上看这个 C 的定义为 void C_IsrSWI(int, int);
代码中的 BL C_IsrSWI 就是调用 C 程序函数。
TST r0,#Tbit 中的 Tbit 的定义在代码中没有写出来,应该在前面加上 Tbit EQU 0x20
这个 Tbit 即是 CPSR 中的 T 位,看看 ARM 手册呀。
这行代码是判断进入异常前是处于 ARM 状态还是 THUMB 状态。
多看书很重要。
呵呵,楼上说的没错,我就直接把一段贴出来。我以为楼主一看就明白