我把这部分代码做了更改,先前的代码,改变了SVC的堆栈,而现在的代码不会更改SVC的堆栈,我这样改是不是更好的,如果不好,不好在哪里?
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 CPSR, R5 ;恢复CPSR
// LDMFD SP!, {R0-R12, LR, PC }^ ;运行新任务
LDMFD SP!, {R0-R12, LR, PC } |