首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖ARM Cortex-M3中的默认内存访问行为

覆盖ARM Cortex-M3中的默认内存访问行为
EN

Stack Overflow用户
提问于 2017-06-23 05:10:41
回答 1查看 350关注 0票数 0

根据ARM的说法,Cortex-M3的默认行为是阻止来自某些内存区域的执行。详情请登录:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/CIHDHAEF.html

根据上面的信息页面:“可选的MPU可以覆盖默认的内存访问行为”。这一切都很好,因为我们希望从特定于实现的0xF0000000区域执行代码,该区域默认设置了XN "Execute Never“标志。

我们能够对MPU进行编程,以对内存区域施加额外的限制,因此很明显,MPU可以正常工作。但是,如果我们将MPU设置为允许在0xF0000000区域执行,当我们尝试在0xF0000000执行时,CPU仍然进入异常。

有人知道Cortex-M3 MPU是否应该能够像ARM页面所建议的那样解除默认限制吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-25 15:22:12

虽然在ARM文档中可能没有明确说明,但默认MPU配置似乎已经是限制最少的配置,以便默认情况下具有MPU的设备与没有MPU的设备的行为相同。因此,您不能删除这些限制是有意义的。

Memory access behaviour表将0xE0100000- 0xFFFFFFFF区域显示为“设备”区域,而不是存储器区域。在Memory regions, types and attributes上描述了设备和正常区域的处理器行为。对于具有设备属性保留访问顺序的区域的要求将要求处理器在执行代码时以不同的方式处理这样的内存,从而使处理器更加复杂。从这样的内存中执行也会效率较低。

本质上,如果意图是支持从内存执行,那么它必须映射到内存区域,而不是设备区域。

请注意,在Cortex-R4 documentation中,限制是明确说明的:

不能从具有设备或强序内存类型属性的区域执行

指令。处理器将这些区域视为具有XN权限的区域。

然而,我找不到一个类似的明确声明来描述M3。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44709447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档