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
我的問題:
- 如何將這些指令影響的數據緩存?
- 數據總線是否在整個加載/存儲過程中被鎖定,還是僅在每個32位加載/存儲中鎖定?
換句話說,對於LDM
指令,ARM是否鎖定數據總線並將所有數據加載到寄存器中,還是僅針對每個32位傳輸鎖定數據總線?
該代碼運行在ARM Cortex A8(Texas Instruments am3358)上。
我沒有看到任何硬件細節在此頁面ARM Architecture Reference Manual
看看amba/axi文檔,我無法想象有任何類型的總線鎖定,加載地址請求會以id結尾,稍後我接受該地址,然後再在這裏存儲您的數據。這些總線的設計使許多傳輸一次發生,像這樣對齊和一個64位的多位數據傳輸,這是可能的,每個傳輸都是一個事務。我有理由相信雖然長度字段允許更多,商店可能變成單獨的64位傳輸。 –
誰知道可能負載被分成8個字然後2.我不知道什麼是緩存行大小,你想做最大的交易,你可以(儘可能多的ldm/stm寄存器),但如果你也可以對齊緩存線和做整個我會認爲這也有幫助。您可以使用systick定時器,理想情況下沒有其他任何事情發生(baremetal)並進行一些速度實驗,以查看是否有8個寄存器,對齊,移動優於10,只讀測試,只寫等。 –
組合的trm對於核心,l2緩存的trm和總線信息(amba/axi)可能是您將要發現的所有已發佈的文檔。 –