本節(jié)內(nèi)容主要講述CortexR52內(nèi)核Cache的具體操作包括使緩存無效(invalidate)操作,清除(clean)緩存。有的時(shí)候客戶可能需要對cache做一些清理,比如invalidate,clean等操作。雖然目前在cortex R52內(nèi)核很少需要操作cache,但是本節(jié)依然給一些操作指導(dǎo)和實(shí)踐,以備以后不時(shí)之須。
Cache Line緩存行的概念
操作cache相關(guān)指令需要通過匯編代碼來操作,也都是以緩存行(Cache Line)為單位來進(jìn)行操作。CortexR52緩存行的長度是64字節(jié),比如下面的invalidate指令:
點(diǎn)擊可查看大圖
指令的解釋如下:
點(diǎn)擊可查看大圖
1__asm volatile
這表示這是一段內(nèi)聯(lián)匯編代碼,并且使用volatile關(guān)鍵字告訴編譯器不要對這段代碼做優(yōu)化。
2"mcr p15, #0, %[bsc_sdram_cs3_mirror_space], c7, c6, #1 "
這是ARM處理器的指令。mcr是一個(gè)協(xié)處理器數(shù)據(jù)操作指令,用于向協(xié)處理器(如CP15)中的特定寄存器寫入數(shù)據(jù)。在這里,它將數(shù)據(jù)寫入到CP15寄存器中。p15, #0: 指定了協(xié)處理器的編號(hào),這里表示CP15。
3%[bsc_sdram_cs3_mirror_space] "r" (n)
這里使用了內(nèi)聯(lián)匯編中的替換字符串(substitution strings),%[bsc_sdram_cs3_mirror_space] 用于指定一個(gè)替換占位符,它將在后面的 :: 部分中提供實(shí)際的值。"r" (n) 則表示使用寄存器(register)約束,這意味著n是一個(gè)變量。通常情況下,使用 "i" 約束表示將一個(gè)立即數(shù)直接嵌入到匯編指令中,而不是從變量中加載。但在你的代碼中,你想要從一個(gè)變量中加載一個(gè)值傳遞給匯編指令。因此,你應(yīng)該使用 "r" 約束來表示將一個(gè)寄存器中的值傳遞給匯編指令,而不是使用 "i"。
4:: 和 : "memory"
這兩個(gè)部分是內(nèi)聯(lián)匯編的修飾符。:: 表示沒有輸出寄存器,"memory" 則表示該內(nèi)聯(lián)匯編代碼可能會(huì)對內(nèi)存進(jìn)行讀寫操作,因此編譯器需要考慮到內(nèi)存屏障(memory barrier)的影響。
以RZT2M為例對cache作一些操作
1以rzt2m讀取SDRAM為例,做一個(gè)打開和關(guān)閉cache的性能比較
SDRAM在代碼中如果使用external Address sapce mirror的地址空間,那么開啟和關(guān)閉cache的配置如下圖所示:
點(diǎn)擊可查看大圖
點(diǎn)擊可查看大圖
從上圖可以看出關(guān)閉cache后讀取數(shù)據(jù)的時(shí)間是打開cache后時(shí)間開銷的十多倍。所以cache是否使能,性能差別十分顯著。
2如果同樣是讀取10K bytes的數(shù)據(jù),加上一起對cache invalidate/clean的操作之后,時(shí)間開銷如下
點(diǎn)擊可查看大圖
上面的代碼每讀取sdram一次,都有對cache做操作。所以時(shí)間開銷增加了很多,但是實(shí)際情況,是否需要頻繁的操作cache需要看實(shí)際情況而定。注意每次對cache的操作都是以,cache line的長度(64字節(jié))對cache做處理的。比如invalidate某段sdram地址對應(yīng)的cache, 0x58000000-0x58000040, 那么對這段地址的invalidate操作是:
左右滑動(dòng)查看完整內(nèi)容
__asm volatile ( "mcr p15, #0 , %[bsc_sdram_cs3_mirror_sapce], c7, c6, #1 " /*DCIMVAC ->Invalidate data cache line by VA to PoC: test OK*/ ::[bsc_sdram_cs3_mirror_sapce] "i" (0x58000000) : "memory");
注意代碼中 "i" 與 "r" 的區(qū)別,在上文中已經(jīng)有提到。
注意對cache的操作需要十分慎重,并且充分驗(yàn)證的情況下進(jìn)行。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1360瀏覽量
40185 -
指令
+關(guān)注
關(guān)注
1文章
606瀏覽量
35617 -
Cortex
+關(guān)注
關(guān)注
2文章
202瀏覽量
46415
原文標(biāo)題:解密Cortex R52內(nèi)核Cache:操作實(shí)踐、性能測試與深度解析(4)
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論