立即学习:https://edu.csdn.net/course/play/4605/82626?utm_source=blogtoedu
解决了栈冲突的问题:为每个任务独立分配栈
在发生异常的时候:
CPU会自动保存 xPSR,PC(R15),LR(R14),R12,R0~R3
到栈中,该栈是独立的话就不会冲突
在退出异常的时候:
CPU会自动弹栈 xPSR,PC(R15),LR(R14),R12,R0~R3
到栈中,该栈是独立的话就不会冲突
解决>>建立一个独立的栈就好了
我们如何切换栈呢?
修改R13
就好了
解决内核寄存器的冲突:出现两个冲突,第一个是当前的任务寄存器的值,第二个是需要切换的任务寄存器的值
CPU只为我们保存了xPSR [R0,R1,R2,R3,R12,R14(LR),R15(PC)]
还有 [R4~R11,R13]
没有被保存
R13
为栈指针寄存:我们通过修改R13
便可以更改当前的任务栈,所以不需要保存R13
的值
那么只需要手动保存 [R4~R11]
就好了
解决冲突1
保存当前的[R4-R11]
解决冲突2
恢复正要切换的任务的[R4-R11]
注意切换的时候要先把栈指针恢复再切换