MMU 这个东西,说实话,对于我这种整天和单片机打交道的人来说,既熟悉又陌生。就像自己的手掌一样,知道是用来做什么的,却不知道手上有多少条纹路,多少条深沟浅壑……


我一直以为打开MMU会拖慢整个系统的速度,在做RTEMS系统移植ARM的时候,都把MMU关闭的。利用相关的协处理器指令,关闭MMU。但最近看到一个测试,的确让我出乎意料……

下面是MCUZONE在AT91sam9261公板上做得一个测试。我在相关的芯片上也做了测试,证明这个测试是真的。结果是非常有说服力的。相关的代码可以在ATMEL官方网站获得(已经上传CSDN,需要的朋友请点击链接获取:http://download.csdn.net/source/3436299)。


MCUZone做了比较多的工作,在IAR、Keil、GNU的编译平台下,不同的优先级别下,都做了测试,做了详细的对比。报告我也上传了CSDN,有兴趣的朋友请移步:http://download.csdn.net/source/3436504。下面列出报告的结论部分,供大家参考。


至于相对于关闭I/D cache和MMU:

  • 为什么不打开I/D Cache,只打开MMU的情况下,也是有所加速的。
  • 打开I/D cahce,不开MMU,系统也有提速。
  • 打开MMU和I/D cache,提升速度是巨大的。

后面两种情况还能解释。cache肯定会加速系统的;MMU限定了cache工作的范围和存取的方法。使得cache工作的更加有效率,比如说,MMU配置正确的情况下datacache不会缓存IO口的数据 ,使得cache工作更有效率,从而加速系统。然而第一种情况,实在是难以解释?MMU也会影响CPU的流水线吗?呵呵,多想了,不过有一些细节还没有想通。恳请哪位大神出来赐教。