在ARM架构中,在读取CPU关闭序列时,我发现了以下步骤:
WFI
(等待中断)清洁L1是什么意思?这是否意味着删除L1的所有内容? L2中的清洁状态是什么意思?
答案 0 :(得分:1)
ARM Cortex-A文档中的什么是干净的?
清理通常表示 flush (将脏缓存行写入下一级)。它仅对 Dcache 或统一缓存有效。有时我们需要清除和无效(清除缓存)。如果某些其他实体(总线主控/外设)可能会更改内存,这一点很重要。通常,总线(AXI)具有避免这种情况的机制。此外,如果您更新主内存中的代码并且有以前的I-cache数据,则需要使其无效。
为什么要多次清理?
您需要清理L1以确保数据位于L2(已刷新)中,以便您可以清除L2。当我们禁用L1 DCache时,您可能会在L1中的执行L2刷新中获得一些陈旧数据。我不完全确定为什么他们说干净而不是第6步无效。你没有给出一个精确的ARM CPU,这些细节因类型而异。看起来这可能是带有外置L2C-310的Cortex-A5 / A8 / A9。
第二次L1清理是由于两级缓存之间的竞争。它在Cortex-A技术参考手册(TRM)中描述。我会遵循他们的建议,因为它可能避免一些罕见的角落情况,这种类型的代码很难调试。必要时关闭/暂停/休眠将禁用所有调试设备,并且很难像启动代码那样出现问题。