在Cortex-M3处理器中,可以选配一个存储器保护单元(MPU),它可以实施对存储器(主要是内存和外设寄存器)的保护,以使软件更加健壮和可靠。在使用前,必须根据需要对其编程。如果没有启用MPU,则等同于系统中没有配MPU。MPU有以下功能可以提高系统的可靠性:
①阻止用户应用程序破坏操作系统使用的数据;
②阻止一个任务访问其他任务的数据区,从而把任务隔开;
③可以把关键数据区设置为只读,从根本上消除了被破坏的可能;
⑤此外,还可以通过MPU设置存储器regions的其他访问属性,比如,是否缓区,是否缓冲等。
MPU在执行其功能时,是以所谓的“region”为单位的。一个region其实就是一段连续的地址,只是它们的位置和范围都要满足一些限制(对齐方式、最小容量等)。Cortex-M3的MPU共支持8个regions,并允许把每个region进一步划分成更小的“子region”。此外,还允许启用一个“背景region”(即没有MPU时的全部地址空间),不过它是只能由特权级享用。在启用MPU后,就不得再访问定义之外的地址区间,也不得访问未经授权的region。否则,将触发MemManage fault。
MPU定义的regions可以相互交迭。如果某块内存落在多个regions中,则访问属性和权限将由编号最大的region来决定。比如,若1号region与4号region交迭,则交迭的部分受4号region控制。
典型情况下,在启用MPU的系统中,都会有下列的regions:(www.xing528.com)
①特权级的程序代码(如OS内核和异常服务例程);
②用户级的程序代码;
③特权级程序的数据存储器,位于代码区中(data_stack);
④用户级程序的数据存储器,位于代码区中(data_stack);
⑤通用的数据存储器,位于其他存储器区域中(如SRAM);
⑥系统设备区,只允许特权级访问,如NVIC和MPU的寄存器所有的地址区间;
⑦常规外设区,如UART、ADC等。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。