登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

关于44Binit.s中的程序复制代码的不解

作者:剑下亡魂 栏目:ARM技术
关于44Binit.s中的程序复制代码的不解
    ;****************************************************
    ;拷贝并粘贴 RW data/zero initialized data                *
    ;****************************************************
    adr        r0, ResetEntry                    
    ldr        r1,    BaseOfROM
    cmp        r0,    r1
    ldreq    r0, TopOfROM
    beq        InitRamData
    
    ;****************************************************
    ;计算拷贝程序在FLASH中的实际位置                        *
    ;****************************************************
    ldr        r2,    =CopyProcBeg
    sub        r1, r2, r1
    add        r0, r0, r1    
    ldr        r3,    =CopyProcEnd
    
    ;****************************************************
    ;将拷贝程序复制到ram中                                *
    ;****************************************************
0    
    ldmia    r0!, {r4-r7}
    stmia    r2!, {r4-r7}
    cmp        r2, r3
    bcc        %B0    
    
    ;********************************************************
    ;开始用ram中的拷贝程序复本将所有剩下的代码复制到ram中    *
    ;********************************************************
    ldr        r3, TopOfROM        
    ldr        pc, =CopyProcBeg
    
    ;********************************************************
    ;本段将代码由实际烧入的地址拷贝到ro-base所指定的位置    *
    ;只拷贝CopyProcEnd以后的代码                            *
    ;********************************************************
CopyProcBeg    
0    
    ldmia    r0!, {r4-r11}
    stmia    r2!, {r4-r11}
    cmp        r2, r3
    bcc        %B0    
CopyProcEnd
    
    sub        r1, r2, r3
    sub        r0, r0, r1        
    
InitRamData    
    ldr        r2, BaseOfBSS
    ldr        r3, BaseOfZero    
0
    cmp        r2, r3
    ldrcc    r1, [r0], #4
    strcc    r1, [r2], #4
    bcc        %B0    

    mov        r0,    #0
    ldr        r3,    EndOfBSS
1    
    cmp        r2,    r3
    strcc    r0, [r2], #4
    bcc        %B1

2楼: >>参与讨论
剑下亡魂
ro=0x0c008000, rw=NC
下载到FLASH后运行

adr        r0, ResetEntry
ldr        r1,    BaseOfROM
r0的值是多少?0还是ro_base?

adr  r0, ResetEntry 与
ldr  r0, =ResetEntry 有啥区别?

ldr        r2,    =CopyProcBeg
r2的值又是多少?offset还是ro_base+offset



3楼: >>参与讨论
剑下亡魂
还有
    sub        r1, r2, r3
    sub        r0, r0, r1
在程序复制完成后的这两条指令有什么用?
r2-r3不是等于0的吗?

4楼: >>参与讨论
剑下亡魂
ldr        pc, =CopyProcBeg
由程序看是把PC值置为ro_base+标志CopyProcBeg的偏移量

也就是说=CopyProcBeg的值就是ro_base+标志CopyProcBeg的偏移量

5楼: >>参与讨论
eqtwo
帮你顶
 
6楼: >>参与讨论
剑下亡魂
现在只有这点不明白
    sub        r1, r2, r3
    sub        r0, r0, r1
在程序复制完成后的这两条指令有什么用?
r2-r3不是等于0的吗?

偶想不出在什么情况下,R2、R3的值会不相等?

还是在考虑了在THUMB状态下可能会不等的情况?

7楼: >>参与讨论
剑下亡魂
DX们请帮忙解释一下啊。
    sub        r1, r2, r3
    sub        r0, r0, r1

这两句具体有什么用处??

8楼: >>参与讨论
EQTWO
在帮你顶下
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
麻烦大家推建一款音频变解码芯片
4M bit存储器at45db041在广州好买吗,多少钱?有没其它便宜的?
这里有用LPC2100系列开发过固话短信的朋友吗?
请问哪里可以下载uclinux 2.4.18的内核代码呀??
坛子里玩ARM的兄弟,有没有使用IAR环境的?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号