接上一贴: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?
OH ,GOD,真的按照我上面方式改了后,程序可以往下执行了,不会报什么出错了
但还有些问题,不过有进展。。。go on
哎,这个2410的测试程序肯定是针对128MB SDRAM的系统来搞的,忽悠死我了
不是自己写的真不放心啊
.....不懂
如果不需要自己写操作系统,似乎没有必要把这东西弄的这么清楚
代码里面没有注解么? 要不你找个有详细注解的...
注意运算符优先顺序....究竟是+优先还是>>优先....
发现你对代码钻研的很深入......
赞一个
引用: 引用 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",嘿嘿
谢谢啦,继续调试
//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 ~
如上所示,这是我的内存布局,应该没有问题吧,这是三星测试程序中自带的布局
我觉得没有什么问题。
哎,一个周末又过去了
// 0x33ff0000 ~ 0x33ff47ff : Heap & RW Area
顺便问一下,这个 Heap RW Area 指的是什么区域
是不是就是指 编译后的RW 和ZI区
现在初步怀疑是因为ZI区域的东西把我的用户栈给冲了,,,嘿嘿
我这工程ZI区域就有300多KB,已经跑到FIQ ~ User Stack Area 区域了,真搓啊
“非法侵犯别人的领地是没有好果子吃滴”
#define _MMUTT_STARTADDRESS 0x33ff8000
这个我修改过,呵呵
楼主不是可以了嘛,现在遇到啥问题?
哦, my god
这个我看过
楼主搜索 发帖者:gooogleman
关键词 MMU, 估计有东西是你需要的。