zyp000 发表于 2012-4-17 20:06:16

求一个MMU的简单例程

本帖最后由 zyp000 于 2012-4-17 21:25 编辑

在书本上理解了一点MMU,实践却总也行不通。
向各位求一个完整的MMU例程,Make一下上机就能看到效果的最好。
另外想问下各位谁实践过韦东山视频教程里的源码?
我尝试过韦东山教程里的一些bin,由于没有视频中使用的OpenJTAG,所以使用uboot+DWN下载到nandflash,都无法正常运行,下载地址尝试过0x0和0x30000000 。
阅读了一下这些例程,启动文件里好像都没有对时钟进行初始化。在KeilARM下试了一下,不初始化时钟的情况下,程序不能正常运行。

zchong 发表于 2012-4-17 20:24:10

下一个rt-thread吧,里面有mini2440的BSP,有个简单的MMU映射

zyp000 发表于 2012-4-17 21:22:22

zchong 发表于 2012-4-17 20:24 static/image/common/back.gif
下一个rt-thread吧,里面有mini2440的BSP,有个简单的MMU映射

呵呵,刚有在网上逛了一圈,好像是因为KeilARM里,不能再用户模式下操作协处理器。
看过韦东山的视频教程,其中好像都没有提及需要在管理模式下才能操作协处理器。

dr2001 发表于 2012-4-17 21:38:50

ARM7/9模式切换是代码处理的。
ARM7/9复位是特权级,SVC模式。保持特权级就无任何限制。

zyp000 发表于 2012-4-18 07:58:40

dr2001 发表于 2012-4-17 21:38 static/image/common/back.gif
ARM7/9模式切换是代码处理的。
ARM7/9复位是特权级,SVC模式。保持特权级就无任何限制。 ...

哦,明白了。
Keil的启动代码已经将处理器切换为用户模式,所以操作CP15的指令都属于未定义指令,产生了未定义指令中断,而Keil启动代码里的未定义指令中断程序是一个死循环,程序应该就是死在这里了吧?
但是,韦东山视频里的那些程序,并未进行模式切换,那就应该一直处于特权模式(SVE),可是,程序执行不正常,本来是个流水灯试验的,下载板上以后,4个灯全部亮起,就不动了。
我买的实验板是TQ2440,在TQ的网站上说,韦东山视频里也用的TQ2440,只不过,他是用OpenJTAG+(忘了程序名了)下载,我用的是uboot+DWN下载,纳闷哎。
自学太纠结了。。。

dr2001 发表于 2012-4-18 08:22:06

看手册,所有信息都是从手册来的,东西总共就那么多。

具体实现上,每个人的方法都不完全一样;这是一整套东西,前后不一致就死翘翘。

Etual 发表于 2012-4-18 08:51:37

如果我没有记错的话,友善自带的 2440test 就有MMU映射的。看看源代码。

zyp000 发表于 2012-4-18 12:09:16

谢谢几位,刚在KeilARM下已经实现用MMU流水灯了。
理解和源代码都没什么问题。
原因:
就是KEIL的启动代码,我把开启MMU的代码插在了跳入__main之前,此时,KEIL的启动代码已经切换到了用户模式。KEIL启动代码里切换模式的代码就是为每种模式设置栈指针,在之前开启MMU对程序没什么影响,我的代码移至切换模式前,就OK了。。。
手册是好东西,可惜英文比较差,找时间要恶补一下了,呵呵。
页: [1]
查看完整版本: 求一个MMU的简单例程