我使用的
开发板是mini2440,交叉编译器版本为友善官方提供的
ARM-linux-gcc-4.4.3,主机环境是物理机上的ubuntu12.04,使用jlink-V8和SEGGER官网提供的linux版JlinkExe软件来烧写程序。在GPIO和SDRAM相关裸机程序烧写时都是正常的,以下是我烧写的步骤:
①用韦老师提供的mini2440源代码make生成*.bin文件;
②开发板从nand flash启动,jlink连开发板jtag口,运行JlinkExe,先用h来halt一下,再用loadbin *.bin 0x00000000下载程序到SRAM(个人理解是这样),最后用g来运行程序,结果实现都现象正常;
在学习MMU部分时,同样使用以上的步骤方法,结果是led都不亮。
反复查看mmu.dis都没发现问题。于是用nor flash中的superviv下载mmu.bin到nand flash的vivi分区,这样从nand flash启动时就会执行mmu.bin程序。经过验证结果也是正确的。
那么问题就出在jlink烧写程序了,通过网上查阅资料,尝试了一下这样烧写:先halt,再setpc 0,然后loadbin,最后g,结果程序居然执行了!
我的问题就在这里,为什么需要用setpc 0 程序才能正常运行呢?