2567|0

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

44b0的代码复制部分? [复制链接]

    ;****************************************************
    ;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里边的数据啊?!

此帖出自ARM技术论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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