;在这里有可能发生中断,而此时新的当前线程的上下文并没有完全恢复。和线程被中断的情景相似:
;硬件自动保存部分寄存器到线程栈中,其他寄存器还游离在处理器上下文中。
------------------------------------------------------
;在这里有可能发生中断,硬件自动保存部分寄存器到线程栈中不会发生的......
因为咬尾了,新的高优先级中断ISR,不会保存寄存器(进入中断,硬件自动入栈的寄存器)的....,咬尾就是这个意思啊..
但为什么堆栈没有乱? 运行到CPSIE I之后,PSP的确修改了,主要是运行了以下几个指令:
LDM R0, {R4-R11} ;// 出栈 R4 - R11
ADDS R0, R0, #0x20 ;// 调整PSP
MSR PSP, R0
但堆栈没有乱,因为在新的ISR中,又要把 {R4-R11} 重新入栈,PSP又重新指向新的栈顶了,最后把PSP保存到改任务控制块的OSTCBStkPtr中.
|