新开一贴---继续MMU调试

JINBAOO   2010-1-31 16:00 楼主
接上一贴:http://topic.eeworld.net/u/20100131/15/462e28c6-78c7-41aa-a2f8-02d643802276.html

我晕,又发现了一个不对的地方(应该是不正常的吧)

#define _RAM_STARTADDRESS       0x30000000
#define _NONCACHE_STARTADDRESS        0x31000000
#define _ISR_STARTADDRESS       0x33ffff00     
#define _MMUTT_STARTADDRESS     0x33ff8000
#define _STACK_BASEADDRESS      0x33ff8000
#define HEAPEND                 0x33ff0000

看到红色部分,MMU_TLB基址放在了0x33ff8000开始处,NND,我的开发板上总共的SDRAM区域才64MB,相当于
0x3000 0000 ~ 0x33f0 0000空间,现在这个MMU_TLBBASE都被定位到SDRAM区域之外了,这肯定有正常吧?

我来实时把MMU_TLBBASE改回到SDRAM区域之内,看时候OK?

回复评论 (16)

OH ,GOD,真的按照我上面方式改了后,程序可以往下执行了,不会报什么出错了

但还有些问题,不过有进展。。。go on

哎,这个2410的测试程序肯定是针对128MB SDRAM的系统来搞的,忽悠死我了
不是自己写的真不放心啊
点赞  2010-1-31 16:07
.....不懂
如果不需要自己写操作系统,似乎没有必要把这东西弄的这么清楚
点赞  2010-1-31 16:08
代码里面没有注解么? 要不你找个有详细注解的...
点赞  2010-1-31 16:18
不好意思,我说错了。。。。

我再整整
点赞  2010-1-31 16:36
提示: 作者被禁止或删除 内容自动屏蔽
点赞  2010-1-31 16:42
提示: 作者被禁止或删除 内容自动屏蔽
点赞  2010-1-31 19:46
注意运算符优先顺序....究竟是+优先还是>>优先....
点赞  2010-1-31 20:37
提示: 作者被禁止或删除 内容自动屏蔽
点赞  2010-1-31 20:44
发现你对代码钻研的很深入......
赞一个
点赞  2010-1-31 20:47
引用: 引用 8 楼 great_bug 的回复:
pTT=(U32 *)(_MMUTT_STARTADDRESS+vaddrStart>>20)

pTT=(U32 *)_MMUTT_STARTADDRESS+vaddrStart>>20

----------
这两个表达式是不同的.

第一个是两个unsigned int相加后转换成unsigned int*

第二个是一个unsigned int*加一个unsigned int,因为一个unsigned int是4字节,对一个U32 *做一次增量(+1),实际地址增加4


ls谢谢你的鼓励,其实对这个还真有点兴趣

你的一句话提醒我了,哎,C语言的基础又忘了

"指针+1时,相当于在内存空间递增4bytes",嘿嘿

谢谢啦,继续调试
点赞  2010-1-31 21:00
//64MB
// 0x30000000 ~ 0x30ffffff : Download Area (16MB) Cacheable
// 0x31000000 ~ 0x33feffff : Non-Cacheable Area
// 0x33ff0000 ~ 0x33ff47ff : Heap & RW Area
// 0x33ff4800 ~ 0x33ff7fff : FIQ ~ User Stack Area
// 0x33ff8000 ~ 0x33fffeff : Not Used Area
// 0x33ffff00 ~ 0x33ffffff : Exception & ISR Vector Table

#define _RAM_STARTADDRESS       0x30000000
#define _NONCACHE_STARTADDRESS        0x31000000
#define _ISR_STARTADDRESS       0x33ffff00     
/*****************************************/
#define _MMUTT_STARTADDRESS     0x33ff8000
/*****************************************/
#define _STACK_BASEADDRESS      0x33ff8000
#define HEAPEND                 0x33ff0000

另:
;The location of stacks
UserStack                EQU        (_STACK_BASEADDRESS-0x3800)        ;0x33ff4800 ~
SVCStack                EQU        (_STACK_BASEADDRESS-0x2800)     ;0x33ff5800 ~
UndefStack                EQU        (_STACK_BASEADDRESS-0x2400)     ;0x33ff5c00 ~
AbortStack                EQU        (_STACK_BASEADDRESS-0x2000)     ;0x33ff6000 ~
IRQStack                EQU        (_STACK_BASEADDRESS-0x1000)        ;0x33ff7000 ~
FIQStack                EQU        (_STACK_BASEADDRESS-0x0)        ;0x33ff8000 ~

如上所示,这是我的内存布局,应该没有问题吧,这是三星测试程序中自带的布局
我觉得没有什么问题。

哎,一个周末又过去了
点赞  2010-1-31 21:23
// 0x33ff0000 ~ 0x33ff47ff : Heap & RW Area

顺便问一下,这个 Heap RW Area 指的是什么区域
是不是就是指 编译后的RW 和ZI区

现在初步怀疑是因为ZI区域的东西把我的用户栈给冲了,,,嘿嘿

我这工程ZI区域就有300多KB,已经跑到FIQ ~ User Stack Area 区域了,真搓啊

“非法侵犯别人的领地是没有好果子吃滴”
点赞  2010-1-31 22:40
跟踪帖子帮顶
点赞  2010-2-1 08:47
哦,遇到瓶颈了
点赞  2010-2-2 22:15
#define _MMUTT_STARTADDRESS    0x33ff8000
这个我修改过,呵呵

楼主不是可以了嘛,现在遇到啥问题?
点赞  2010-2-4 21:38
哦, my god  
这个我看过

楼主搜索 发帖者:gooogleman
关键词 MMU, 估计有东西是你需要的。
点赞  2010-2-4 21:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复