关于UCOS在ARM上移植模式切换的疑问
在UCOSII ARM7的移植中,有段代码不太理解,想请教大家!
如下代码:
OSIntCtxSw_1
;获取新任务堆栈指针
LDR R4, [R6]
ADD SP, R4, #68 ;17寄存器CPSR,OsEnterSum,R0-R12,LR,SP
LDR LR, [SP, #-8]
MSR CPSR_c, #(NoInt | SVC32Mode) ;进入管理模式
MOV SP, R4 ;设置堆栈指针
LDMFD SP!, {R4, R5} ;CPSR,OsEnterSum
;恢复新任务的OsEnterSum
LDR R3, =OsEnterSum
STR R4, [R3]
MSR SPSR_cxsf, R5 ;恢复CPSR
LDMFD SP!, {R0-R12, LR,PC }^ ;运行新任务
为什么在系统模式获取LR后,又进入到管理模式去给OsEnterSum 和SPSR_CXSF赋值,再恢复寄存器,运行新任务?
难道在系统模式下恢复这些东西不行么?
[解决办法]
某些早期的核可能没有SYS模式,于是就切到SVC
其实是一样的