Open cisen opened 3 years ago
https://blog.csdn.net/qq_20334947/article/details/86603530?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
https://blog.csdn.net/u010961173/article/details/102380900
https://blog.csdn.net/zym326975/article/details/85049892?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
在Cortex‐M3处理器中可以选配一个存储器保护单元(MPU),它可以实施对存储器(主 要是内存和外设寄存器)的保护,以使软件更加健壮和可靠。在使用前,必须根据需要对其 编程。如果没有启用MPU,则等同于系统中没有配MPU。MPU有如下的能力可以提高系统的 可靠性:
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 控制。
当ARM处理器产生一个内存访问信号时,内存保护单位MPU将负责检查要访问的地址是否在被定义的域中。
① 如果地址不在任何域中,存储器产生异常。如果内核预取指令则MPU产生预取中止异常;如果是存储器数据请求,则产生数据中止异常。
② 如果地址在多个域内,由MPU判断域的有效级来决定存储区域的访问属性。访问属性可以在CP15的寄存器中设定,可设定的位为C(Cache)、B(Buffer)、AP(Access Permission)。这些属性的具体定义为:
· C和B可以控制Cache和写缓存属性的Cache策略。例如,可以设置一个域使用回写(write-back)策略访问存储器,而另一个域则以无Cache和无写缓存方式访问;
· AP(access permission)决定域是否可以被访问。如果在当前处理器模式下,该域不能被访问,MPU将产生一个存储器访问异常。
图1 显示了一个存储器访问过程
https://blog.csdn.net/qq_20334947/article/details/86603530?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
https://blog.csdn.net/u010961173/article/details/102380900
https://blog.csdn.net/zym326975/article/details/85049892?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
在Cortex‐M3处理器中可以选配一个存储器保护单元(MPU),它可以实施对存储器(主 要是内存和外设寄存器)的保护,以使软件更加健壮和可靠。在使用前,必须根据需要对其 编程。如果没有启用MPU,则等同于系统中没有配MPU。MPU有如下的能力可以提高系统的 可靠性:
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 控制。
内存访问顺序
当ARM处理器产生一个内存访问信号时,内存保护单位MPU将负责检查要访问的地址是否在被定义的域中。
① 如果地址不在任何域中,存储器产生异常。如果内核预取指令则MPU产生预取中止异常;如果是存储器数据请求,则产生数据中止异常。
② 如果地址在多个域内,由MPU判断域的有效级来决定存储区域的访问属性。访问属性可以在CP15的寄存器中设定,可设定的位为C(Cache)、B(Buffer)、AP(Access Permission)。这些属性的具体定义为:
· C和B可以控制Cache和写缓存属性的Cache策略。例如,可以设置一个域使用回写(write-back)策略访问存储器,而另一个域则以无Cache和无写缓存方式访问;
· AP(access permission)决定域是否可以被访问。如果在当前处理器模式下,该域不能被访问,MPU将产生一个存储器访问异常。
图1 显示了一个存储器访问过程