zlg对arm的usos,基本上看清楚了,但有一处不解:
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 }^ ;运行新任务
其中: 最后一行 LDMFD SP!, {R0-R12, LR, PC }^ ;运行新任务 已经可以把LR出栈到用户模式的LR,
但为何前面要做: LDR R4, [R6] ADD SP, R4, #68 ;17寄存器CPSR,OsEnterSum,R0-R12,LR,SP LDR LR, [SP, #-8]
这不也是把LR恢复到系统模式(即用户模式)的LR中吗?
|