刷新数据缓存(dcbf汇编指令)

时间:2018-03-19 10:50:47

标签: c caching assembly nxp-microcontroller

上下文:

我目前想要刷新我的L1 DATA缓存(目标:NXP P2020 Qoriq e500)。

使用“dcbf”指令时出现问题:

dcbf r3, r4 // with r3 and r4 defining the address of the DATA cache

问题:
我的问题是我不知道给这条指令什么参数到达DATA缓存并刷新线路?

我尝试使用“刚刚创建的”变量:

int i = 0; 
// let assume r3 = &i
dcbf 0, r3
isync
msync

我认为dcbf指令将通过& i参数到达数据缓存,但是当我进一步通过探针查看内存时,我看到缓存没有刷新而没有失效。

2 个答案:

答案 0 :(得分:0)

我的根本问题是给dcbf的地址不在缓存中 参考手册说:Perform reads to any 48 Kbyte region, THEN execute dcbf instruction

我现在正在搜索如何读取L1数据缓存

答案 1 :(得分:0)

那么,

我最终这样做是为了替换我的L1数据缓存条目:

FlushL1DCache:
flushloop:
    lwz     r5, 0(r3)       /* Load data to L1 data cache to replace current entries */
    addi    r3, r3, 0x20    /* adds 32 bytes to r3 */
    cmpw    r3, r4          /* if r3 == r4  -> exit the loop */
    ble     flushloop
    msync
    isync
    blr

此代码在失效之前用虚拟代码替换L1数据高速缓存条目。