c文件内存映射后分块_内存保护单元MPU的作用

点击上方公众号名称关注,获得更多内容

a2cc3fc51c82ce20c4b19d71e37f89e5.gif ✎ 编 者 悟 语

      气候的变化会影响人的心境和状态。

文 章 导 读

    今天给大家整理了下内存保护单元MPU相关的内容,后面有时间整个程序再给大家说下它的实际使用方式,今天先将下它相关的内容,让大家对它有个整体的认识,希望对小伙伴们有所帮助哈,e751f92aec6d70f0ef2feab75c16f5f8.png

    公众号新增了“读者讨论”功能,新公众号不能留言,大家不要浪费讨论的机会哈,7b7accbf955c097068c5067e62f8e349.png

1

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异常。异常处理要么设为复位要么执行其他操作。

2

MPU保护机制及相关概念

    当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位置。

3

MPU的作用

    MPU作用主要有两个方面,可以总结为两个保护,一个检测。

    1)MPU的保护作用

    指访问区域的保护和读写区域的保护。

    ① 访问区域的保护。

    可以将内存区域划为特权区域和普通区域,特权区域只有特权用户才能访问,普通用户被禁止访问,以此来保护特定的数据。

    常见的应用场景:

    1> 对带系统的来说,可以设置数据,以防止用户应用程序破坏操作系统使用过程中的数据。


    2> 隔离任务,以防止一个任务访问其他任务的数据。

    3> 将SRAM或者RAM空间定义为不可执行,防止代码注入。

    ② 读写区域的保护。

    设置指定的区域为只读,可以有效的防止比较关键的数据被错误修改。

    2)MPU的检测功能

    指可以检测堆和栈的溢出情况及数组有没有越界。

    需要注意的是MPU操作的寄存器一般不在芯片的用户手册中,而是在芯片的架构手册中。

总结

    今天给大家讲解了下内存保护单元MPU相关的内容,后面有时间整个程序再给大家说下它的实际使用方式,后面还会有RT1052相关的内容,小伙伴们敬请期待哈,3c000192e5c4da7052a7ae8858b91498.png

    有问题可以参与读者讨论或后台留言交流,公众号18年后新申请的,文章后不支持留言功能的。

推荐文章:

UCOSIII空闲任务的作用及源码分析

图解UCOSIII的任务调度机制(送3个思维导图文件)

图解UCOSIII的任务就绪表(提供Edraw Mind版文件下载)

图解UCOSIII的任务挂起表(提供Edraw Mind版文件下载)

操作系统中几个容易混淆的概念

UCOSIII共享资源管理方式汇总

UCOSIII源码分析之——bsp_os.c文件分析

UCOSIII源码分析之——bsp_cpu.c文件分析

专辑推荐:

Python技能专辑

C语言专辑

IDE调试专辑

软件推荐专辑

软实力专辑

Linux专辑

扫码关注我们

9c06e246cee764eefdebd10f364cd043.png

9fe2e9de57e938fd749c0388a1e90d5a.gif Game Over!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值