freenl 发表于 2011-4-5 22:55:54

解释:为什么调试中断要开启MMU?

调试中断程序时,当发生中断,处理器会自动跳转到norflash或者内部4kb SRAM 处执行中断跳转程序,如果要想正常进行在线调试,要让norflash或者SRAM中的中断跳转程序和SDRAM中的程序一致,这样才能在发生中断时能再成功跳转到SDRAM中的中断服务子程序中;
   还有一种方法是开启MMU,让norflash或者4kb的SRAM中地址空间映射到调试代码的运行空间,这样当PC指向norflash或者SRAM的虚拟地址时,直接进行地址转换跳到SDRAM中执行。映射代码如:MMU_SetMTT(0x00000000,0x03f00000,(int)__ENTRY,RW_CB);
   我所遇到的情况:
    因为我的norflash中一直存放的是uboot代码,而uboot代码的中断跳转程序和2440init.s中的代码不一致,当我在没有开启MMU地址映射且选择norflash启动的情况下进行在线调试中断程序时,会发生指令异常,这是因为中断发生时程序跳转到norflash中执行中断跳转程序,此时执行的是uboot中的程序,和我2440init.s不一致,这样随着程序的执行取出了非法指令,从而产生指令异常,如果把程序下载到norflash中就不会发生这样的问题(不开启MMU也可以正常在线调试)。若要在不重新烧写norflash的情况下正常在线调试就要进行地址映射。
    另外可以选择nandflash启动模式,且用uboot把自己的程序下载到nandflash中,这样不开启MMU也可以进行在线调试,当然开启也不会又任何问题!

jing007520 发表于 2012-6-26 20:54:48

醍醐灌顶,原来是这回事
页: [1]
查看完整版本: 解释:为什么调试中断要开启MMU?