新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Cortex-M3-MPU(存储器保护单元)

Cortex-M3-MPU(存储器保护单元)

作者:时间:2022-05-31来源:CSDN收藏

使命-关键系统

本文引用地址:http://www.eepw.com.cn/article/202205/434657.htm

  这种系统往往都用于性命攸关的场合,且必须连续无故障地工作,比如,火车调度系统、生命维持系统、大型发动机驱动器、核子反应堆控制、网络/电信的数据交换中枢等。如果失能,将导致惨重的经济与损失,甚至会使无数人死于非命。因此,决不允许这类系统出现

  上述情况。然而,这些系统的复杂度往往都非常高,几乎不可能由开发人员保证这种可靠性。因此,需要在硬件水平上加入一个“公安机关”。通过它设置各种类型的“禁地”,并且施加多种规章条例。一旦发现违章,则强制改变执行流和处理器的工作状态,以便可以由软件做进一步的处理。这样,就可以为不同的程序限定一个内存使用范围,从而使野指针或恶意破坏无法影响不允许访问的区域。此即存储器保护单元()。有时,对存储器的管理更进一步,做到可以对地址执行变换的程度,此时程序使用的地址未必是真实的存储器地址。它在的基础上,还消灭了内存碎片和浪费,并且能进一步地让应用程序拥有方便舒适的地址空间,从而使程序规模可以扩大甚至数百倍。此即为“存储器管理单元”(MMU)。

MPU概览

  在Cortex‐M3处理器中可以选配一个存储器保护单元(MPU),它可以实施对存储器(主要是内存和外设寄存器)的保护,以使软件更加健壮和可靠。在使用前,必须根据需要对其编程。如果没有启用MPU,则等同于系统中没有配MPU。MPU有如下的能力可以提高系统的可靠性:

  阻止用户应用程序破坏操作系统使用的数据

  阻止一个任务访问其它任务的数据区,从而把任务隔开。

  可以把关键数据区设置为只读,从根本上消除了被破坏的可能。

  检测意外的存储访问,如,堆栈溢出,数组越界。此外,还可以通过MPU设置存储器regions的其它访问属性,比如,是否缓区,是否缓冲等。

  MPU在执行其功能时,是以所谓的“region”为单位的。一个region其实就是一段连续的地址,只是它们的位置和范围都要满足一些限制(对齐方式,最小容量等)。CM3的MPU共支持8个regions。怎么,嫌少?是少了点,不过,还允许把每个region进一步划分成更小的“子region”。此外,还允许启用一个“背景region”(即没有MPU时的全部地址空间),不过它是只能由特权级享用。在启用MPU后,就不得再访问定义之外的地址区间,也不得访问未经授权的region。否则,将以“访问违例”处理,触发MemManage fault。

  MPU定义的regions可以相互交迭。如果某块内存落在多个region中,则访问属性和权限将由编号最大的region来决定。比如,若1号region与4号region交迭,则交迭的部分受4号region控制。

MPU的典型设置

  在典型的情况下,当需要阻止用户程序访问特权级的数据和代码时,可以启用MPU。在设计MPU regions时,需要考虑到下列的regions:如下图:

MPU的自定义设置后的权限



关键词: MPU 微处理器 Cortex-M3

评论


相关推荐

技术专区

关闭