在中断里切换为特权级
2026/10/1大约 2 分钟
在下面的图片中可以看见,在普通的非特权模式下,要想从非特权模式到特权模式是没有反应的,没有效果的。
所以要在特权模式下触发从非特权模式到特权模式的转换
上面一讲有一张PPT里面就有说中断和异常都是特权模式,所以我们要在这里面来进行由非特权模式向特权模式的转换

这里的话,在执行完从特权级向非特权级的转变之后,我们在调试界面手动触发interrupt1,在中断里面进行特权级的切换
可以看见进入中断前呢,是非特权级,然后我们把这个NVIC控制器的这两个给它勾选上,

然后再点F11单步进入,它就进入到了这个interrupt1的中断里面,可以看见,进入中断之后,由非特权级变成了特权级,符合之前说的
再在里面执行这个由非特权级向特权级切换的函数,也就是将control寄存器的第零位写1

注意这里面有一个链接寄存器的一个特殊值

我们的这里的LR寄存器里面的值后面是F9,所以说这就代表着我们接下来返回的时候呢,会从我们的主栈里面获取状态,回到我们的线程模式
可以看见从中断里面出来之后,依然保持着特权级,并不是回到了非特权级,所以在interrupt1里面的切换生效了
并且此时的模式是线程,这就是上面我们链接寄存器是F9的作用


