问各位朋友一个zlgucos移植的问题 <br /><br />在SoftwareInterrupt <br />LDR SP, StackSvc ; 重新设置堆栈指针 <br />STMFD SP!, {R0-R3, R12, LR} <br />MOV R1, SP ; R1指向参数存储位置 <br />MRS R3, SPSR <br />TST R3, #T_bit ; 中断前是否是Thumb状态 <br />LDRNEH R0, [LR,#-2] ; 是: 取得Thumb状态SWI号 <br />BICNE R0, R0, #0xff00 <br />LDREQ R0, [LR,#-4] ; 否: 取得arm状态SWI号 <br />BICEQ R0, R0, #0xFF000000 <br />; r0 = SWI号,R1指向参数存储位置 <br />CMP R0, #1 <br />LDRLO PC, =OSIntCtxSw ;swi 0x00调用OSIntCtxSw <br />LDREQ PC, =__OSStartHighRdy ; SWI 0x01为第一次任务切换 <br /><br />BL SWI_Exception <br />LDMFD SP!, {R0-R3, R12, PC}^ <br />中,程序有可能会跳到最后这个代码LDMFD SP!, {R0-R3, R12, PC}^ 处嘛? <br /><br />LDRLO PC, =OSIntCtxSw ;swi 0x00调用OSIntCtxSw <br />LDREQ PC, =__OSStartHighRdy ; SWI 0x01为第一次任务切换 <br />BL SWI_Exception <br />这三个语句都跳到相应的处理程序地方去了,没有看到它们跳回来的语句啊? |