一、 简述 Cortex-M 里面有特权级别的概念,不同级别可以设定不同的权限,如何转换特权级别基本是本章的内容。
二、操作模式 ARM M 核操作模式有两个: - 线程(Thread)模式:在复位时或异常处理完成返回后进入此模式。此模式可以为特权,也可以为非特权.可使用任意栈指针(stack pointer)
- 处理(Handler)模式:在进入异常处理时进入此模式,只有此模式才能从异常中退出。此模式总是特权的。只能使用主栈指针(main stack pointer)
注意: Reset 是异常的一种特殊形式,会以一种可能不可恢复的方式终止当前执行。
2.1 特权 代码可以运行在特权和非特权运行,非特权执行限制或排除对某些资源的访问。特权可以访问所有资源。
可以分为以下两种: 2.1.1 Supervisor 在此特权下,可以往 CONTROL 寄存器的 bit0 位(nPRIV)写入 1,那么,就会进入非特权。
2.1.2 User 在 User 级别下,可以调用 SCV 指令,进入Supervisor 异常,由于在 Handler模式下透视特权级别,所以可以在这里面往 CONTROL 寄存器的 bit0 位(nPRIV)写入 0,那么就可以进入特权模式。 在 User 级别下,如果访问权限不允许的数据访问,会导致异常。如处于非特权下去访问一个设置为仅有特权才能访问的内存区域,那么就会发生 MemManage 异常。 User 级别下,特殊寄存器(如 CONTROL)的访问被忽略。
可以参考 Contex-M4,对此的限制为: - 对 MSR 和 MRS 指令限制访问
- 不能访问系统定时器、NVIC 或系统控制块(SCB)
- 可能对外设和内存有访问限制
注意:CONTROL 是特殊寄存器,需要是用 MSR 才能进行赋值,如 MSR CONTROL, r0。 需要用 MRS 才能赋值给通用寄存器,如:MRS r0, CONTROL。
三、参考文档(1) ARM:《DDI0403E_d_armv7m_arm.pdf》
|