ARM Cortex-R4F、缓存和 MPU

标签 arm embedded firmware cortex-m

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

最佳答案

在 ARMv7-A/R 架构下,SCTLR C 和 I 位是否影响启用的 MMU/MPU 生成的属性实际上是实现定义的。但是,从 default memory map attributes in the Cortex-R4 TRM 的描述来看,它看起来属于“按预期运行”的阵营,其中 SCTLR.C = 0 表示对任何普通内存区域的访问都是不可缓存的。

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

也就是说,要考虑的更毛茸茸的方面是,虽然保证不可缓存的访问不会在缓存中分配,但如果该位置的有效条目是否仍然可以命中,则由实现定义恰好在场。因此,如果您在进行任何可缓存访问后关闭缓存,您将希望在继续之前立即清理并使整个内容无效 - 我不确定该实现选择 Cortex-R4 落在哪一边,但无论哪种方式我不会冒险不这样做。

关于ARM Cortex-R4F、缓存和 MPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35874533/

相关文章:

embedded - 为什么 ROM 的闪存扇区起始地址较小?

c - 有没有免费软件可以替代 CCS C 编译器?

driver - 我是否认为现代消费类显卡使用完全相同的 GPU 结构来进行实际图形渲染和裸计算?

c - 按下两个开关时打开 LED

c - ARM Keil 错误 #17 预期为 "]"、C3910W : Old syntax

c - 启用 const 数组的部分

linux - 如何在启动过程后切换 linux 内核控制台?

c - IAR工作台内存泄漏分析(EWARM)

operating-system - Cortext-M3 上的任务切换在 IRQ 后崩溃

c - Arm Cortex架构中的局部变量是存储在寄存器还是堆栈中?