ARM(v7)未对齐的访问处理和设备/强顺序内存

ARM(v7)未对齐的访问处理和设备/强顺序内存,arm,memory-alignment,armv7,Arm,Memory Alignment,Armv7,ARMv7的LDR(以及其他一些)指令通过“分解”对多个对齐访问的访问(例如中所述),支持从中加载未对齐的地址。 另一方面,如果内存映射为设备或强顺序,则不允许未对齐的访问(将触发异常)。 我的问题是关于这种行为的理由。毕竟,对于这些内存类型,访问也可以分解为多个对齐。以下是我的猜测: 设备内存通常用于映射硬件寄存器,因此每次访问都可能产生副作用。因此,该体系结构不允许“隐藏”访问,这可能会产生不必要的副作用 强顺序内存假定严格的访问顺序,所以“隐藏”访问将超出预期顺序 因此,这两个是我从“预期

ARMv7的
LDR
(以及其他一些)指令通过“分解”对多个对齐访问的访问(例如中所述),支持从中加载未对齐的地址。 另一方面,如果内存映射为设备或强顺序,则不允许未对齐的访问(将触发异常)。
我的问题是关于这种行为的理由。毕竟,对于这些内存类型,访问也可以分解为多个对齐。以下是我的猜测:

  • 设备内存通常用于映射硬件寄存器,因此每次访问都可能产生副作用。因此,该体系结构不允许“隐藏”访问,这可能会产生不必要的副作用
  • 强顺序内存假定严格的访问顺序,所以“隐藏”访问将超出预期顺序
  • 因此,这两个是我从“预期行为违反”的角度推测的基本原理。是否还有其他物理限制


    我的问题的基本原理是,我们有一些内存映射区域,这些区域在物理级别上有对齐要求,但我不关心我在问题中列出的任何注意事项,如果ARM重新排列或分解访问,则可以。因此,我的疑问是,如果我将其映射为“普通内存”(从不缓存),是否会出现我遗漏的任何问题。

    ARM将可缓存内存访问描述为幂等访问,因此将未对齐的访问“分解”为多个访问对于可缓存访问比设备或强顺序内存更容易接受。我认为你的观点1是最相关的。@EOF是的,缓存是我忽略的另一个方面,因为它与我的具体问题不太相关。。我的问题的基本原理是,我们有一些内存映射区域,在物理级别上确实有对齐要求,但我不关心我在问题中列出的任何注意事项,如果ARM重新排列或分解访问,这是可以的。因此,我的疑问是,如果我把它映射为“正常记忆”,是否会出现我遗漏的任何问题。那么,你为什么不提出这个问题,而不是这种迂回的胡言乱语呢?@EOF我相信这部分研究本身就很重要。但我将把这一部分添加到问题中。至少在我熟悉的axi总线上是不可能的,我们都可以阅读文档,在不将它们分成多个部分的情况下进行这些未对齐的访问。即使64位axi的stm中有四个字不是双字对齐的,它也会进行三次传输(这会使堆栈在64位边界上对齐),一个字、一个双字和一个字。至少在写作方面。同样,对于地址0x1001处的64位值,一个传输用于奇数字节,另一个传输用于其余字节,因为它们位于另一端的不同字/双字内,需要单独传输。。