点击上方公众号名称关注,获得更多内容
![a2cc3fc51c82ce20c4b19d71e37f89e5.gif](https://i-blog.csdnimg.cn/blog_migrate/115494c6ad211c74574716e2e38ca2bc.gif)
气候的变化会影响人的心境和状态。
文 章 导 读
今天给大家整理了下内存保护单元MPU相关的内容,后面有时间整个程序再给大家说下它的实际使用方式,今天先将下它相关的内容,让大家对它有个整体的认识,希望对小伙伴们有所帮助哈,!
公众号新增了“读者讨论”功能,新公众号不能留言,大家不要浪费讨论的机会哈,!
RT1052的MPU
1)RT1052的MPU概述
RT1052的MPU提供多达16个可编程保护区域,每个区域都有自身起始地址、大小及其他配置信息(如读写、访问权限等内容)。
默认条件下RT1052的MPU是关闭的,如果打算使用MPU,必须先使能MPU。
16个可编程保护区域,每个区域还可以被进一步划分为更小的子区域。
MPU可以将内存划分为不同的区域,每个区域都可以根据需要设置为特定的访问属性。
2)RT1052的MPU需要注意的点
RT1052的MPU允许启用一个背景区域,这个背景区域指得是没有进行MPU配置的其他的空间,背景区域只能在特权级访问。
在启用MPU后,就不得再访问定义之外的地址区间,也不得访问未经授权的区域,否则,将以“访问违例”处理,触发MemManage异常。
此外,MPU定义的区域还可以相互交迭。如果某块内存落在多个区域中,则访问属性和权限将由编号最大的区域来决定。
内存保护单元MPU有些微控制器内核是带的,有些则没有。
注意,MPU不仅可以保护内存区域(SRAM区),还可以保护外设区(比如SEMC)。
我们可以通过MPU设置存储器的访问权限,当存储器访问和MPU定义的访问权限相冲突的时候,则访问会被阻止,此时会触发MemManage异常。异常处理要么设为复位要么执行其他操作。
2MPU保护机制及相关概念
当MPU被禁用或不存在时,系统采用下表中列出的默认系统内存映射。启用MPU时,启用的区域定义系统地址映射。
下表为系统默认的内存地址映射。
地址 | 名称 | 设备类型 | 是否可执行XN | Cache | 描述 |
0x00000000-0x1FFFFFFF | 代码 | 正常 | - | WT | 通常用于存储ROM或Flash存储区 |
0x20000000-0x3FFFFFFF | SRAM | 正常 | - | WBWA | 通常用于片上RAM存储区 |
0x40000000-0x5FFFFFFF | 外设 | 设备 | XN | - | 片上外设地址空间 |
0x60000000-0x7FFFFFFF | RAM | 正常 | - | WBWA | 具有写回、写分配属性的内存,支持二级/三级缓存。 |
0x80000000-0x9FFFFFFF | RAM | 正常 | - | WT | 具有写通缓存属性的内存 |
0xA00000000-0xBFFFFFFF | 设备 | 设备,可共享 | XN | - | 可共享的设备空间 |
0xC0000000-0xDFFFFFFF | 设备 | 设备,不可共享 | XN | - | 不可共享的设备空间 |
0xE0000000-0xFFFFFFFF | 系统 | 下面介绍(附) | XN | - | 私有外设总线和供应商系统外设的系统段 |
其中0xE0000000-0xFFFFFFFF区域可以拆分为下面两个区域。
地址 | 名称 | 设备类型 | 是否可执行XN | 描述 |
0xE0000000-0xE00FFFFF | PPB | Strongly-ordered | XN | 1MB区域保留给PPB。它用于支持关键资源,包括系统控制空间和调试功能。 |
0xE0100000-0xFFFFFFFF | Vendor_SYS | 设备 | XN | 供应商系统区域。 |
1)附——系统区域说明
内存映射的系统区域,从0xe000000开始细分如下:
偏移 + 0x00000000处的1MB区域为私有外设总线(PPB)保留。
偏移 + 0x00100000的区域是供应商系统区域,Vendor_SYS。
在供应商区,ARM建议:
供应商资源从0xf000000开始。
保留区域0xE0100000-0xEFFFFFF。
2)关于上表中存储区域的说明
对私有外设总线(PPB)的访问始终使用默认的系统地址映射。
从向量地址表读取的异常向量始终使用默认的系统地址映射。
MPU在如何更改与系统空间相关联的默认内存映射属性方面受到限制。
系统空间始终标记为XN,从不执行。
默认的系统内存映射可以配置为为特权访问提供后台区域。
在多个区域中地址匹配的访问使用访问属性的最高匹配区域号。
与区域地址的所有访问条件不匹配的访问(启用MPU)或背景/默认内存映射匹配会生成故障。
3)一些概念的说明
XN:Execute Never,不可执行。
XN表示从不执行区域。从XN区域执行代码会产成MemManage异常。
WT:WriteThrough,写通,可以视为非缓存。
WBWA:WriteBack/WriteAllocate。写回写分配,可被视为写通或非缓存。
Strongly-ordered:此类型的内存,对该位置内存进行访问可能会导致副作用,当加载返回的值时可能会根据执行的加载数而变化。
通常标记为Strongly-ordered的内存区域是内存映射的外围设备和I/O位置。
3MPU的作用
MPU作用主要有两个方面,可以总结为两个保护,一个检测。
1)MPU的保护作用
指访问区域的保护和读写区域的保护。
① 访问区域的保护。
可以将内存区域划为特权区域和普通区域,特权区域只有特权用户才能访问,普通用户被禁止访问,以此来保护特定的数据。
常见的应用场景:
1> 对带系统的来说,可以设置数据,以防止用户应用程序破坏操作系统使用过程中的数据。
2> 隔离任务,以防止一个任务访问其他任务的数据。
3> 将SRAM或者RAM空间定义为不可执行,防止代码注入。
② 读写区域的保护。
设置指定的区域为只读,可以有效的防止比较关键的数据被错误修改。
2)MPU的检测功能
指可以检测堆和栈的溢出情况及数组有没有越界。
需要注意的是MPU操作的寄存器一般不在芯片的用户手册中,而是在芯片的架构手册中。
总结
今天给大家讲解了下内存保护单元MPU相关的内容,后面有时间整个程序再给大家说下它的实际使用方式,后面还会有RT1052相关的内容,小伙伴们敬请期待哈,。
有问题可以参与读者讨论或后台留言交流,公众号18年后新申请的,文章后不支持留言功能的。
推荐文章:
UCOSIII空闲任务的作用及源码分析
图解UCOSIII的任务调度机制(送3个思维导图文件)
图解UCOSIII的任务就绪表(提供Edraw Mind版文件下载)
图解UCOSIII的任务挂起表(提供Edraw Mind版文件下载)
操作系统中几个容易混淆的概念
UCOSIII共享资源管理方式汇总
UCOSIII源码分析之——bsp_os.c文件分析
UCOSIII源码分析之——bsp_cpu.c文件分析
专辑推荐:
Python技能专辑
C语言专辑
IDE调试专辑
软件推荐专辑
软实力专辑
Linux专辑
扫码关注我们
![9fe2e9de57e938fd749c0388a1e90d5a.gif](https://i-blog.csdnimg.cn/blog_migrate/b8aa942791593c0e1ea736caaec112a1.gif)