哈哈,我决定采用保守的方法!
还是先切换到系统模式!!! SUB LR,LR,#4 ;把LRSPSR保存在中断栈 STMFD SP!,{LR} MRS LR,SPSR STMFD SP!,{LR}
MRS LR,CPSR ;切换进入系统模式 BIC LR,LR,#0X1F ORR LR,LR,#0X1F MSR CPSR_cxsf,LR
STMFD SP!,{R0-R12,LR} ;保护系统模式(用户模式)的寄存器
MRS LR,CPSR ;打开中断 BIC LR,LR,#0X80 MSR CPSR_c,LR ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MRS LR,CPSR ;关闭中断 ORR LR,LR,#0X80 MSR CPSR_c,LR
LDMFD SP!,{R0-R12,LR} ;恢复系统模式(用户模式)的寄存器
MRS LR,CPSR ;切换回中断模式 BIC LR,LR,#0X1F ORR LR,LR,#0X12 MSR CPSR_cxsf,LR
LDMFD SP!,{LR} ;恢复LRSPSR,实际上是返回中断前模式 MSR SPSR_cxsf,LR LDMFD SP!,{PC}^
我想想估计这样比较好,这样可以充分利用用户模式的堆栈空间! 让系统绝大部分时间都跑在系统模式!这样就可以把用户模式的LR用起来了,估计大大的有好处!
哈哈,探讨探讨技术很有乐趣啊. |
|