ARM Cortex-R4F,Cache和MPU

时间:2016-03-08 17:55:35

标签: arm embedded firmware cortex-m

在ARM Cortex-R4F上,当我使用SCTLR寄存器位I和C禁用指令和数据高速缓存时,MPU区域将区域属性定义为cachable(回写)会发生什么?是否会被忽略,因为全局缓存被禁用或是否会导致未知行为?

1 个答案:

答案 0 :(得分:3)

在ARMv7-A / R架构下,它实际上是实现定义的,SCTLR C和I位是否会影响启用的MMU / MPU生成的属性。但是,根据default memory map attributes in the Cortex-R4 TRM的描述判断,它看起来像“表现如预期”阵营,其中SCTLR.C = 0意味着对任何正常内存区域的访问都是非可缓存的。

即使不是这种情况,替代方案只是该位无效,并且使用MMU / MPU属性。幸运的是,这里没有完全不可预测行为的余地。

尽管如此,要考虑的更为棘手的方面是,虽然不可缓存的访问保证不会在缓存中分配,但是实现定义了它们是否仍然可以在该位置的有效条目中命中碰巧出现了。因此,如果您在进行任何Cacheable访问后关闭缓存,您将需要立即清理并使整个事情无效,然后再进一步 - 我不确定Cortex-R4实现选择的哪一方,但无论如何我不会冒不这样做的风险。