Cortex-m中MPU
MPU寄存器函数与设置
1. 内存保护单元(MPU)
本节介绍在某些 STM32 微控制器中实现的内存保护单元 (MPU)。 请参阅相应的器件数据手册,查看您使用的 STM32 类型中是否存在 MPU。
MPU将内存映射划分为若干个区域,并定义了每个区域的位置、大小、访问权限和内存属性。 它支持:
• 每个区域的独立属性设置
• 重叠区域
• 将内存属性导出到系统。
内存属性影响对区域的内存访问行为。 Cortex-M4 MPU 定义:
• 8 个独立的内存区域,0-7
• 背景区域。
当内存区域重叠时,内存访问会受到编号最大的区域属性的影响。例如,区域 7 的属性优先于与区域 7 重叠的任何区域的属性。
背景区域具有与默认内存映射相同的内存访问属性,但只能从特权软件访问。
Cortex-M4 MPU 内存映射是统一的。这意味着指令访问和数据访问具有相同的区域设置。
如果程序访问 MPU 禁止的内存位置,则处理器会产生内存管理故障。这会导致故障异常,并可能导致操作系统环境中的进程终止。
在 OS 环境中,内核可以根据要执行的进程动态更新 MPU 区域设置。通常,嵌入式操作系统使用 MPU 作为内存保护。
MPU 区域的配置基于内存类型,请参阅第 28 页的第 2.2.1 节:内存区域、类型和属性。
表 38 显示了可能的 MPU 区域属性。
1.1 MPU访问权限属性
本节介绍主控板访问权限属性。 MPU_RASR 寄存器的访问许可位 TEX、C、B、S、AP 和 XN 控制对相应内存区域的访问。 如果在没有所需权限的情况下访问内存区域,则 MPU 会生成权限错误。
表 39 显示了 TEX、C、B 和 S 访问权限位的编码。