0 前言
如果我们是基于MCU的裸机编程,是不需要关心内核的操作模式和特权等级的。如果是进行RTOS的开发编程,我们就要必要了解一下Cortex‐M3/M4/M7内核的操作模式和特权等级,这在RTOS的线程切换等场合会使用到。
1 Cortex‐M3/M4/M7内核的操作模式和特权等级
1.1 Cortex‐M3/M4/M7内核的操作模式
Cortex‐M3/M4/M7内核支持2个操作模式,分别是异常Handler模式和线程模式。简单来说当MCU正在执行异常/中断服务函数时就处于Handler模式,其余情况下则是线程模式。
1.2 Cortex‐M3/M4/M7内核的特权等级
Cortex‐M3/M4/M7内核支持2个特权等级,分别是用户级和特权级,就相当于PC上的游客和管理员的区别。处于特权级状态时,CPU能够访问系统控制空间(SCS),该空间包含了配置寄存器组以及调试组件的寄存器组。
1.3 操作模式和特权等级的联系
(1)当处理器处于线程状态下时,既可以使用特权级也可以使用用户级;Handler模式下总是处于特权级的(这也是为什么RTOS切换线程都是在PendSV异常中进行的原因)。
(2)线程模式+用户级下,CPU无法访问系统控制空间(SCS)、禁止MRS/MSR访问。如果在此期间访问了特殊功能寄存器,访问操作将被忽略。如果访问了系统控制空间,将直接产生硬fault。
(3)特权级下我们可以通过设置CONTROL[0]来进入用户级,而用户级下无法修改CONTROL[0]来进入特权级。要想进入特权级必须产生一个异常事件(RTOS通常触发PendSV异常从而进入特权级,实现对MRS/MSR的访问),由这个异常事件来修改CONTROL[0]来进入特权级。
有关特权级和处理器模式切换过程如下:
关于控制寄存器(CONTROL)的描述如下: