打印

arm 软中断的问题

[复制链接]
1602|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ltjish|  楼主 | 2009-10-20 09:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, ST, AC, pc, ck
SoftwareInterrupt
        LDR     SP, StackSvc            ; 重新设置堆栈指针
        STMFD   SP!, {R0-R3, R12, LR}
        MOV     R1, SP                  ; R1指向参数存储位置
        MRS     R3, SPSR
        TST     R3, #T_bit              ; 中断前是否是Thumb状态
        LDRNEH  R0, [LR,#-2]            ; 是: 取得Thumb状态SWI号
        BICNE   R0, R0, #0xff00
       LDREQ   R0, [LR,#-4]            ; 否: 取得arm状态SWI号
        BICEQ   R0, R0, #0xFF000000
                                        ; r0 = SWI号,R1指向参数存储位置
        CMP     R0, #1
        LDRLO   PC, =OSIntCtxSw
        LDREQ   PC, =__OSStartHighRdy   ; SWI 0x01为第一次任务切换
        BL      SWI_Exception
        
        LDMFD   SP!, {R0-R3, R12, PC}^
        
StackSvc           DCD     (SvcStackSpace + SVC_STACK_LEGTH * 4 - 4)
在取得ARM状态下SWI号的时候,使用LDREQ   R0, [LR,#-4] 语句,这里本人有个疑问。在发生中断是时候LR保存了PC的值,而在执行SWI指令的时候PC指向的是当前执行指令+8的地址,那要获得SWI号的时候应该使用LDREQ   R0, [LR,#-8] 才对啊。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

1

粉丝