微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 44b0 复制代码部分?

44b0 复制代码部分?

时间:10-02 整理:3721RD 点击:
    ;****************************************************
    ;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里边的数据啊?!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top