这段代码是ucosii在stm32上的移植,
LDR R0,[R2]; R0 is new process SP
LDM R0, {R4-R11} ; 从新的进程堆栈中恢复 r4-11
ADDS R0, R0, #0x20
MSR PSP, R0; Load PSP with new process SP
ORR LR, LR, #0x04; Ensure exception return uses process stack
CPSIE I
BX LR
如果在这两行之间产生了中断,而在isr中又把即将运行的新任务挂起的话,那么系统是不是混乱了?
因为新任务状态为挂起,而它却在运行。
不会的啊.......
假设先执行PendSV_Handler1,运行到了下面两句之间
CPSIE I
BX LR
发生了定时中断ISR,如果ISR要进行任务切换(有这种情况),ISR希望希望进入PendSV_Handler2进行任务切换(这里标记为2),
两个都是PendSV_Handler中断,会咬尾的.则就执行ISR的最后一句BX LR了.不执行PendSV_Handler1的BX LR......,所以新任务是挂起状态,没有矛盾.