问各位朋友一个zlgucos移植的问题
在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 ;swi 0x00调用OSIntCtxSw LDREQ PC, =__OSStartHighRdy ; SWI 0x01为第一次任务切换
BL SWI_Exception LDMFD SP!, {R0-R3, R12, PC}^ 中,程序有可能会跳到最后这个代码LDMFD SP!, {R0-R3, R12, PC}^ 处嘛?
LDRLO PC, =OSIntCtxSw ;swi 0x00调用OSIntCtxSw LDREQ PC, =__OSStartHighRdy ; SWI 0x01为第一次任务切换 BL SWI_Exception 这三个语句都跳到相应的处理程序地方去了,没有看到它们跳回来的语句啊? |