ARM926EJS Dcache是依赖于MMU,只有开启MMU后Dcache 才真正有效。
正常情况下,开启 Dcache 可以大大加快 CPU 性能;但是遇到特殊情况则出现很大的问题。
有以下三种情况:
- 采用不可缓存代码;
- 采用自修改代码;
- 操作AHB总线。
- 采用不可缓存代码与其他ARM9系列的缓存内核来比,尽管非缓存代码的性能得到了改善,仍然推荐采用ICache,这是实践证明了的。
非缓存代码通常用在boot loader上面,防止cache污染。但是现在ICache在没有启用MMU的情况下仍然能够使能,而且可以通过控制 cache lockdown register 来防止污染,所以采用非缓存代码是没有优点的。
- 采用自修改代码采用一个四字的缓冲区来保存推测到的将要获取的取指令。只有连续的指令可以准确地获取,万一 ARM9EJ-S 内核,缓冲区的内容会被丢掉(discard/flush)。在内核连续预取指的序列中,预取缓冲区的内容可能变为无效,这种情况下,预取缓冲器也应该被刷新(flush)。
- 操作AHB总线 ss
仨
为了保证数据和指令的一致性,必须做以下操作
代码如下:
c语言(iar):
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176808.html原文链接:https://javaforall.net
