SVC 0x0 ; 调用 0 号系统服务
MRS Rn,PSP
指令来获取应用程序的堆栈指针 。通过分析 LR 的值,可以获知在 SVC 指令执行时,正在使用哪个堆栈任务 A 呼叫 SVC 来请求任务切换(例如,等待某些工作完成)
OS 接收到请求,做好上下文切换的准备,并且 pend 一个 PendSV 异常。
当 CPU 退出 SVC 后,它立即进入 PendSV,从而执行上下文切换。
当 PendSV 执行完毕后,将返回到任务 B,同时进入线程模式。
发生了一个中断,并且中断服务程序开始执行
在 ISR 执行过程中,发生 SysTick 异常,并且抢占了该 ISR。
OS 执行必要的操作,然后 pend 起 PendSV 异常以作好上下文切换的准备。
当 SysTick 退出后,回到先前被抢占的 ISR 中, ISR 继续执行
ISR 执行完毕并退出后, PendSV 服务例程开始执行,并且在里面执行上下文切换
关注【一起学嵌入式】,回复“加群”进技术交流群。
觉得文章不错,点击“分享”、“赞”、“在看” 呗