特权模式(Privileged mode)与用户模式(UnPrevileged mode)
特权模式与用户模式是指 Cortex 内核的执行模式。它不是 MPU 的一部分,但与 MPU 单元有关联。当代码运行在特权模式下,
代码拥有所有的访问许可;而代码运行在用户模式,则访问权限受限制。限制包括在系统设计阶段就定义的可运行指令限制,
可访问内存以及外设限制。也包括由 MPU 单元动态所定义的内存访问规则。
从特权模式进入用户模式,只需使用 MSR 指令操作 CONTROL 寄存器。但是,不可以直接从用户模式转入特权模式,必须
经过一个异常处理操作模式,比如 SVC( Supervisor Calls)。在异常处理通过操作 CONTROL 寄存器,可从用户模式回
到特权模式。请注意,特权线程与异常处理线程,都是在特权模式下运行。
如下图所示:
在代码中结合特权与用户模式使用 MPU
1. 开发环境
开发板: STM32 L476RG NUCLEO
开发工具:STM32Cube_FW_L4_V1.7.0
IAR/Keil
注:也可以选择其他 STM32 系列并选择相应的开发板与固件库。
2. 开发目标定义
在软件中定义一块数组,使用 MPU 将该区域配成仅可从特权模式下进行访问,并验证用户模式下访问会导致内存管理异
常或者硬错误。