2017-03-17 15 views
0

我正在尋找一種有效的方法來複制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)可能是您將要發現的所有已發佈的文檔。 –

回答

0

你應該看看來自ARM的Cortex-A series programming guide。我現在沒有在這裏引用它,但是AFAIR在高效內存處理方面花費了大量時間,如果不是專門針對總線鎖定等低級細節的話(您可能需要查看AHB/AXI這方面的文檔,但我不相信這裏真的有必要)。