当前位置:  开发笔记 > 编程语言 > 正文

为什么一个内存区域被标记为非缓存?

如何解决《为什么一个内存区域被标记为非缓存?》经验,为你挑选了3个好方法。

在嵌入式应用程序中,我们有一个表格,描述了在目标板上有效的各种地址范围.该表用于设置MMU.
RAM地址范围标记为可​​缓存,但其他区域标记为不可缓存.这是为什么?



1> Benoit..:

这样做是为了使处理器不会因缓存而使用陈旧值.当您访问(常规)缓存RAM时,处理器可以"记住"您访问的值.下次查看相同的内存位置时,处理器将返回它记住的值而不查看RAM.这是缓存.

如果在没有处理器知道的情况下位置的内容可以改变,如果你有一个存储器映射设备(例如FPGA返回一些数据包),处理器可以返回从上次"记住"的值,会错的.

要避免此问题,请将该地址空间标记为不可缓存.这可以确保处理器不会尝试记住该值.



2> bmdhacks..:

不应缓存用于DMA或其他硬件交互的任何内存区域.



3> Ilya..:

如果同时由硬件和软件访问内存区域(EX:硬件配置寄存器或DMA的分散 - 收集列表),则必须将此区域定义为非缓存.对于实际的DMA,可以将内存缓冲区定义为高速缓存,并且在大多数情况下,建议缓存缓冲区以允许应用程序级别快速访问该缓冲区.在将缓冲区传递给DMA或应用程序之前,驱动程序负责刷新/使缓存无效.

如果我们有专门的硬件,即高速缓存一致性互连(CCI),它将同步各种硬件块对内存的访问,上面的小更新必须是不正确的.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有