[讨论] 44b0的代码复制部分?

yanglong0322   2012-4-1 12:32 楼主

    ;****************************************************
    ;Copy and paste RW data/zero initialized data     *
    ;****************************************************
    LDR     r0, =|Image$$RO$$Limit| ; 是RO输出运行域的结束地址

    LDR     r1, =|Image$$RW$$Base| ; 是RW输出运行域的起始地址

    LDR     r3, =|Image$$ZI$$Base|  ;Zero init base => top of initialised data
   
    CMP     r0, r1       ; Check that they are different一般情况下这两者不是相等么?
    BEQ     %F1
0
    CMP     r1, r3       ; Copy init data
    LDRCC   r2, [r0], #4     ;--> LDRCC r2, [r0] + ADD r0, r0, #4
    STRCC   r2, [r1], #4     ;--> STRCC r2, [r1] + ADD r1, r1, #4
    BCC     %B0
1
    LDR     r1, =|Image$$ZI$$Limit| ; Top of zero init segment
    MOV     r2, #0
2
    CMP     r3, r1       ;Zero init
    STRCC   r2, [r3], #4
    BCC     %B2

 

 

问题1:

前提:ADS1.2编译时,RO输出运行域的起始地址设置为0x0c000000;

 

|Image$$RO$$Limit|是RO输出运行域的结束地址

|Image$$RW$$Base|是RW输出运行域的起始地址

在不设置RW的时候,这两者不是相等么?那下一句代码:

CMP     r0, r1       ;

BEQ     %F1;

直接跳到下边去执行ZI段清零了,根本没有复制RW段代码啊?!

 

问题2:

CMP     r0, r1;如果不相等

 

0
    CMP     r1, r3       ; Copy init data
    LDRCC   r2, [r0], #4     ;--> LDRCC r2, [r0] + ADD r0, r0, #4
    STRCC   r2, [r1], #4     ;--> STRCC r2, [r1] + ADD r1, r1, #4
    BCC     %B0

 

这段代码是把r0这个起始地址里的数据复制到 r1这个起始地址里边去

然而,

r0里边装的是RO输出运行域的结束地址(即0x0c00000+数据长度)

r1里边转的是RW输出运行域的起始地址

两个地址都在SDRAM里(bank6),也没有复制ROM里边的数据啊?!

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复