在贵司提供的“缓存”视频教程及例程中,提到了有关配置内存可缓存性的问题,在StarterWare中其对应函数为“CacheEnableMAR(unsigned int baseAddr, unsigned int byteSize)”,但是没有对其进行展开说明。我对该操作的理解有些疑问。我对它的理解是这样的:
内存可缓存性实际上是在内存DDR2中划定一块区域(其起始位置为baseAddr、区域长度为byteSize),只有存储在该区域的变量才能被缓存控制器读取并存储到缓存(L1、L2)中;而在该区域以外的变量则不会被缓存控制器访问并读取,不会出现在L1、L2中,而是仅存在于DDR2里。
因此,在不考虑其他主外设对DDR2中数据造成修改的情况下,或者使用CacheInv排除了某些在DDR2中会被其他主外设修改的变量带来的缓存一致性问题的情况下,可将DDR2的全部空间都配置为可缓存(baseAddr为0xC0000000,byteSize为0x08000000),就像视频和例程代码中演示的那样。但是如果有更高级的要求和操作,也可以自行定义可以被缓存的DDR2空间范围。