;软件中断 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}^
任务切换是模似一次软中断,在这个程序里保存了R0-R3, R12, PC,而任务是自己写的,应该有的任务也会用到R4,R5,R6等其它寄存器。
才入门,如果问得太基础了,请不要见笑:) |