4439|9

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Launch函数问题,高手请进 [复制链接]

这一段是源代码
LEAF_ENTRY Launch       

        ldr            r2, = PhysicalStart       
        ldr     r3, = (VIR_RAM_START - PHY_RAM_START)
       
        sub     r2, r2, r3

        mov     r1, #0x0070             ; Disable MMU
        mcr     p15, 0, r1, c1, c0, 0
        nop
        mov     pc, r2                  ; Jump to PStart
        nop
               
        ; MMU & caches now disabled.
       
PhysicalStart

         mov     r2, #0
        mov     r3, #0
        mcr     p15, 0, r2, c8, c7, 0   ; Flush the TLB
        mov     pc, r0                                ; Jump to program we are launching.
        

        LEAF_ENTRY ShowLights

        mov        pc, lr

        END

这一段是没关MMU的代码

[0xe59f202c]   ldr      r2,0x80026248 ; = #0x80026234
[0xe3a03205]   mov      r3,#0x50000000
[0xe0422003]   sub      r2,r2,r3
[0xe3a01070]   mov      r1,#0x70
[0xee011f10]   mcr      p15,0x0,r1,c1,c0,0
[0xe1a00000]   nop      
[0xe1a0f002]   mov      pc,r2
[0xe1a00000]   nop      
[0xe3a02000]   mov      r2,#0
[0xe3a03000]   mov      r3,#0
[0xee082f17]   mcr      p15,0x0,r2,c8,c7,0
[0xe1a0f000]   mov      pc,r0

这一段是 mov pc,r2后转到的代码,为什么 mov     r2, #0被改成了mrcle    p14,0x6,r13,c14,c14,6
并且不能走下去了。

[0xe59f202c]   ldr      r2,0x30026248 ; = #0x80026234
[0xe3a03205]   mov      r3,#0x50000000
[0xe0422003]   sub      r2,r2,r3
[0xe3a01070]   mov      r1,#0x70
[0xee011f10]   mcr      p15,0x0,r1,c1,c0,0
[0xe1a00000]   nop      
[0xe1a0f002]   mov      pc,r2
[0xe1a00000]   nop      
[0xdededede]   mrcle    p14,0x6,r13,c14,c14,6
[0xe3a03000]   mov      r3,#0
[0xee082f17]   mcr      p15,0x0,r2,c8,c7,0
[0xe1a0f000]   mov      pc,r0

研究了两天了,没找到解决办法,请高手指教,谢谢!

最新回复

谢谢大家的关心,问题弄明白了,这里就不能单步执行,如果单步的话,断点断在哪里,那么这一行就会被改,不知道是不是仿真器的问题,还是别的问题,后来我的断点没设在这里,就可以正常执行了。  详情 回复 发表于 2010-3-16 14:29
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
下边那些内容是你在调试过程中看到的代码还是反汇编得到的?MMU进行地址映射了吗?是否地址映射后访问原地址导致的错误?
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
下面的内容是仿真过程中看到的,UMMU进行地址映射了的
下面是地址映射表
g_oalAddressTable

        DCD     0x80000000, 0x30000000,  64     ; 64 MB DRAM BANK 6
        DCD     0x82000000, 0x08000000,  32     ; 32 MB
        DCD     0x84000000, 0x10000000,  32     ; nGCS2: PCMCIA/PCCARD
        DCD     0x86000000, 0x18000000,  32     ; 32 MB SROM(SRAM/ROM) BANK 3 (CS8900 netcard)
        DCD     0x88000000, 0x20000000,  32     ; 96mb NOR flash
        DCD     0x8A000000, 0x28000000,  32     ;
        DCD     0x8C000000, 0x02000000,  30     ;
        DCD     0x90800000, 0x48000000,   1     ; Memory control register
        DCD     0x90900000, 0x49000000,   1     ; USB Host register
        DCD     0x90A00000, 0x4A000000,   1     ; Interrupt Control register
        DCD     0x90B00000, 0x4B000000,   1     ; DMA control register
        DCD     0x90C00000, 0x4C000000,   1     ; Clock & Power register
        DCD     0x90D00000, 0x4D000000,   1     ; LCD control register
        DCD     0x90E00000, 0x4E000000,   1     ; NAND flash control register
        DCD     0x91000000, 0x50000000,   1     ; UART control register
        DCD     0x91100000, 0x51000000,   1     ; PWM timer register
        DCD     0x91200000, 0x52000000,   1     ; USB device register
        DCD     0x91300000, 0x53000000,   1     ; Watchdog Timer register
        DCD     0x91400000, 0x54000000,   1     ; IIC control register
        DCD     0x91500000, 0x55000000,   1     ; IIS control register
        DCD     0x91600000, 0x56000000,   1     ; I/O Port register
        DCD     0x91700000, 0x57000000,   1     ; RTC control register
        DCD     0x91800000, 0x58000000,   1     ; A/D convert register
        DCD     0x91900000, 0x59000000,   1     ; SPI register
        DCD     0x91A00000, 0x5A000000,   1     ; SD Interface register
        DCD     0x92000000, 0x00000000,   2     ; original location of 32MB of NOR flash
        ;DCD     0x94000000, 0x34000000, 192     ; 192 MB bank 6&7 - Extended RAM
        DCD     0x00000000, 0x00000000,   0     ; end of table
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
这段代码的原型是 void Launch(DWORD dwLaunchAddr);
当调用Launch函数是,参数dwLaunchAddr保存在R0中,
LEAF_ENTRY Launch


这里取得PhysicalStart虚地址,例如是0x80038000

VIR_RAM_START = 0x80000000

PHY_RAM_START = 0x30000000

ldr     r2, = PhysicalStart
ldr    r3, = (VIR_RAM_START - PHY_RAM_START)
r3 = 0x50000000

sub    r2, r2, r3
r2 = 0x30038000
下面是关闭MMU
mov    r1, #0x0070            ; Disable MMU
mcr    p15, 0, r1, c1, c0, 0
nop                           ;关闭后不能做任何事情,否则会死机,所以必须把实地址给PC
mov    pc, r2                  ; Jump to PStart 因为r2是PhysicalStart的实地址,所以跳到PhysicalStart
nop

; MMU & caches now disabled.

PhysicalStart
现在应该在实地址模式下运行程序了,但我的程序跳到这里后 MOV r2,#0这一行的代码被改了,别的都正常
        mov    r2, #0
mov    r3, #0
mcr    p15, 0, r2, c8, c7, 0  ; Flush the TLB 刷新TLB
mov    pc, r0         ; Jump to program we are launching.跳到函数参数的实地址中去
        

LEAF_ENTRY ShowLights

mov pc, lr

END
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
为什么PhysicalStart标签前后的代码都对的,就PhysicalStart这一行代码被改了呢,也就是ldr     r2, = PhysicalStart这一行也被改了。真不明白,郁闷。。。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
[0xe3a03205]  mov      r3,#0x50000000

do you think this command is proper? i think 0x50000000 is too long for the command "mov"

what simulator do you use?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
代码被改了是什么意思~?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 5 楼 sailorlyq 的回复:
[0xe3a03205] mov r3,#0x50000000

do you think this command is proper? i think 0x50000000 is too long for the command "mov"

what simulator do you use?

看他的说明mov r3,#0x50000000是由编译器产生的,源代码是用的LDR,但是不清楚为什么这里会变成MOV。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
我晕,我没有看懂楼主要问什么.....
这个函数我以前看过。呵呵 2440的。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢大家的关心,问题弄明白了,这里就不能单步执行,如果单步的话,断点断在哪里,那么这一行就会被改,不知道是不是仿真器的问题,还是别的问题,后来我的断点没设在这里,就可以正常执行了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表