ARM SWI

morse   2010-3-1 03:44 楼主
谁能给个ARM 软件中断处理程序 (SWI handler)的例子,可以双倍SVC模式下的寄存器数,并且返回USER模式,好像是用一个什么SWI call触发这个中断程序的 求哪位高手给个例子 谢谢!

回复评论 (6)

如果不是技术上的探讨,建议在百度+Google上找答案!^_^,你想要的我没有…
点赞  2010-3-1 09:25
  只是我写的,可以重入,当然就可以返回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}^
   
点赞  2010-3-1 09:42

4楼 DSZ 

IMPORT C_IsrSWI 这个C_IsrSWI是什么?
还有貌似 TST r0,#Tbit 编译报错了 为什么?
谢谢!
点赞  2010-3-1 21:43
这个代码应该是 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 状态。

多看书很重要。
点赞  2010-3-3 01:37
呵呵,楼上说的没错,我就直接把一段贴出来。我以为楼主一看就明白
点赞  2010-3-3 15:58
谁知道swi 0~7软中断的含义啊
点赞  2012-4-9 10:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复