0

根据 ARM,Cortex-M3 的默认行为是阻止从某些内存区域执行。这里的信息:http: //infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/ CIHDHAEF.html

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

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

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

4

1 回答 1

1

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

内存访问行为表将0xE0100000-0xFFFFFFFF 区域显示为“设备”区域而不是内存区域。设备普通区域的处理器行为在内存区域、类型和属性中描述。对具有设备属性的区域保留访问顺序的要求将要求处理器在执行代码时以不同的方式处理此类内存,从而使处理器更加复杂。从这样的内存中执行也会降低效率。

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

请注意,在Cortex-R4 文档中明确规定了限制:

不能从具有设备或强排序内存类型属性的区域执行指令。处理器将这些区域视为具有 XN 权限。

然而,我无法为 M3 找到类似的明确声明。

于 2017-06-25T07:22:12.123 回答