首页 > 解决方案 > 打印ARM926EJ缓存寄存器c7的内容

问题描述

我试图在清理 D 缓存之前和之后查看缓存寄存器的内容和 c7 中脏位的状态。这个链接:

https://developer.arm.com/docs/ddi0198/latest/programmers-model/register-descriptions/cache-operations-register-c7说“如果缓存包含任何脏行,则第 30 位设置为 0。如果缓存不包含脏行,第 30 位设置为 1。” 我有一个变量 c7Value 初始化为 15(随机数)

"tc_loop:   \n"

    "MRC p15, 0, %[c7Value], c7, c10, 3             \n"     //Read value of c7 after cleaning

    "BNE tc_loop            \n"
    :[c7Value] "=r"(c7Value)

    );

当我在上述循环之后打印 c7Value 的值时,该值为零。我认为只有第 30 位会被设置为 0,如果它发现任何缓存线脏。

另外,有没有办法只读取 c7 的内容而不清理它?

其他寄存器如 c1 可以读为:"MRC p15, 0, R1, c1, C0, 0",但是没有指令可以读取 c7。

因此,有人可以告诉我如何打印缓存内容和/或读取 c7 的内容(检查脏状态)吗?

标签: ccachingassemblyinline-assemblyarm9

解决方案


推荐阅读