ARM LDM和STM数据缓存和数据总线

问题描述:

我正在寻找一种有效的方法来复制42个32位连续内存位置。
注意:快照阵列被复制到日志阵列。ARM LDM和STM数据缓存和数据总线

我使用的LDMIA和STMIA对(每指令10个寄存器):

LDMIA R0!, {R2-R12} ; Read 10 array slots\n 
STMIA R1!, {R2-R12} ; Write 10 array slots\n 

我的问题:

  1. 如何将这些指令影响的数据缓存?
  2. 数据总线是否在整个加载/存储过程中被锁定,还是仅在每个32位加载/存储中锁定?
    换句话说,对于LDM指令,ARM是否锁定数据总线并将所有数据加载到寄存器中,还是仅针对每个32位传输锁定数据总线?

该代码运行在ARM Cortex A8(Texas Instruments am3358)上。

我没有看到任何硬件细节在此页面ARM Architecture Reference Manual

+0

看看amba/axi文档,我无法想象有任何类型的总线锁定,加载地址请求会以id结尾,稍后我接受该地址,然后再在这里存储您的数据。这些总线的设计使许多传输一次发生,像这样对齐和一个64位的多位数据传输,这是可能的,每个传输都是一个事务。我有理由相信虽然长度字段允许更多,商店可能变成单独的64位传输。 –

+0

谁知道可能负载被分成8个字然后2.我不知道什么是缓存行大小,你想做最大的交易,你可以(尽可能多的ldm/stm寄存器),但如果你也可以对齐缓存线和做整个我会认为这也有帮助。您可以使用systick定时器,理想情况下没有其他任何事情发生(baremetal)并进行一些速度实验,以查看是否有8个寄存器,对齐,移动优于10,只读测试,只写等。 –

+0

组合的trm对于核心,l2缓存的trm和总线信息(amba/axi)可能是您将要发现的所有已发布的文档。 –

你应该看看来自ARM的Cortex-A series programming guide。我现在没有在这里引用它,但是AFAIR在高效内存处理方面花费了大量时间,如果不是专门针对总线锁定等低级细节的话(您可能需要查看AHB/AXI这方面的文档,但我不相信这里真的有必要)。