ARM Cortex-R4F、高速缓存和MPU

ARM Cortex-R4F、高速缓存和MPU,arm,embedded,firmware,cortex-m,Arm,Embedded,Firmware,Cortex M,在ARM Cortex-R4F上,当我使用SCTLR寄存器位I和C禁用指令和数据缓存时,将区域属性定义为可缓存(写回)的MPU区域会发生什么情况?由于全局缓存被禁用,它会被忽略还是会导致未知行为?在ARMv7-A/R体系结构下,无论SCTLR C和I位是否影响启用的MMU/MPU生成的属性,实际上都是由实现定义的。然而,根据的描述判断,它似乎处于“行为如预期”阵营中,其中SCTLR.C=0表示对任何正常内存区域的访问都是不可缓存的 即使情况并非如此,替代方案也只是位没有效果,并且使用MMU/MP

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

在ARMv7-A/R体系结构下,无论SCTLR C和I位是否影响启用的MMU/MPU生成的属性,实际上都是由实现定义的。然而,根据的描述判断,它似乎处于“行为如预期”阵营中,其中SCTLR.C=0表示对任何正常内存区域的访问都是不可缓存的

即使情况并非如此,替代方案也只是位没有效果,并且使用MMU/MPU属性。幸运的是,这里没有完全不可预测的行为


以上所说,更重要的方面是,虽然保证了不缓存的访问在缓存中不分配,但定义了它们是否仍然能够命中该位置的有效条目是否存在。因此,如果您在进行任何可缓存访问后关闭缓存,您将希望在进一步操作之前立即清除并使整个过程无效-我不确定实现选择Cortex-R4的哪一方面会失败,但无论如何,我都不会冒险不这样做。

Cortex-R4F不是有MMU吗,不仅仅是一个MPU?@Olaf nope,没有一个R-class部件有MMU(他们针对的大多数应用程序都不了解TLB未命中的延迟和通常不可预测的性质)。@Notlikethat:你对MPU的看法是对的,只是检查一下。但是,如果使用静态编程的TLB,MMU可以非常确定。但是我同意这和更简单的MPU和更多的硅空间差不多。谢谢你的回答。我应该在原始问题中提到,启动时禁用指令和数据缓存,然后配置MPU。问题的原因是允许不同的配置设置-启用d/i缓存并为MPU区域指定适当的缓存方案。我认为有可能禁用D/I缓存,但仍保留MPU区域指定“不可缓存”以外的缓存方案。@Bill SCTLR可能仅在可缓存方面覆盖MMU/MPU→不可缓存-后一种可能性不可行。