【发布时间】:2021-09-28 05:15:44
【问题描述】:
我正在为 STM32H743 SoC 中的 DMA 总线主设备开发驱动程序,由 Cortex M7 CPU 驱动。假设我有两个内存位置,x 和 y,它们映射到同一缓存行,它位于正常的可回写缓存内存,并假设以下事件序列:
- 以
x = x1, y = y1开头,缓存行无效。 - CPU 读取
y - DMA 设备集
x = x2,在内存中 - CPU 集
y = y2 - CPU 清理缓存行。
5.完成后,从DMA设备的角度来看,x = ?
我认为 DMA 会看到 x = x1,这是我的推理:
- 当 CPU 在 2. 中读取
y时,缓存行被拉入缓存。它读取x = x1, y = y1,并被标记为有效。 - DMA 然后更新内存中的
x,但更改不会反映在缓存行中。 - 当 CPU 设置
y = y2时,缓存行被标记为脏。 - 当 CPU 清理缓存行时,由于它是脏的,它会被写回内存。
- 当它被写回内存时,它会读取
x = x1, y = y2,从而覆盖 DMA 更改为x。
这听起来像是一个很好的推理吗?
【问题讨论】:
标签: caching arm stm32 cpu-cache cortex-m