FreeRTOS Memory Protection Unit (MPU)
在 FreeRTOS Reference Manual 中,MPU 指 Memory Protection Unit(内存保护单元)。
MPU 是嵌入式处理器(如 ARM Cortex-M / Cortex-R 系列)内部集成的一种硬件保护机制,用于对内存访问权限进行控制。它通过将物理内存划分为若干区域(regions),并为每个区域配置访问权限,实现对代码与数据的访问隔离。
需要注意的是:
MPU 不支持虚拟内存
不进行地址映射或页表管理
仅负责访问权限控制
因此,MPU 可视为 MMU(Memory Management Unit)的轻量级替代方案,适用于资源受限的微控制器系统。
- MPU 在 FreeRTOS 中的作用
在标准(非 MPU)版本的 FreeRTOS 中:
所有任务共享统一的地址空间
任务之间不存在硬件级别的访问隔离
任意任务均可访问内核数据或其他任务的内存
指针错误或越界访问可能破坏系统完整性
在支持 MPU 的 FreeRTOS 版本中(FreeRTOS MPU port):
内核运行于 Privileged Mode(特权模式)
用户任务可运行于 Unprivileged Mode(非特权模式)
每个任务仅可访问被授权的内存区域
内核数据与关键资源可被硬件保护
该机制显著提高了系统的健壮性与安全性。
- 特权级别模型
MPU 版本的 FreeRTOS 通常基于 ARM Cortex-M 的两级权限模型:
Privileged Mode(特权模式)
可访问所有内存区域
可执行特权指令
内核始终运行于此模式
Unprivileged Mode(非特权模式)
只能访问被 MPU 明确授权的内存区域
无法访问内核专用内存
不能执行特权指令
任务若需访问受限资源,必须通过系统调用(SVC)机制进入特权态。
- 任务内存区域配置
MPU 版本的 FreeRTOS 提供专用 API,例如:
xTaskCreateRestricted()
该接口允许在创建任务时显式指定:
任务栈地址
可访问内存区域
访问权限(只读 / 读写 / 可执行)
是否以特权模式运行
通过该机制,可实现任务级内存隔离。
- 典型内存区域划分
在 MPU 配置下,系统通常将内存划分为:
任务私有栈区
任务私有数据区
共享数据区
内核专用区(仅特权访问)
外设寄存器区
MPU 通过 region-based 访问控制确保:
非特权任务不能修改内核数据
任务之间的非法访问被硬件阻止
越界访问触发异常(Memory Fault)
- 应用价值
引入 MPU 的主要目的包括:
- 提高系统可靠性
防止单个任务的内存错误破坏整个系统。
- 提高安全性
实现基础的任务隔离机制。
- 满足功能安全标准
适用于工业控制、医疗设备、汽车电子等对系统安全性要求较高的场景(如 IEC 61508、ISO 26262)。