3174|4

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

复制 NORFLASH 到SDRAM 出错C语言 [复制链接]

copy_code ; 代码拷贝开始符号
mov r0, #0x0 ; R0中为数据开始地址 (ROM数据保存在0地址开始处)

ldr r1, =|Image$$RO$$Base| ; R1中存放RO输出域运行地址,
; 该值由符号变量Image$$RO$$Base取得

ldr r2, =|Image$$ZI$$Limit| ; R2中存放ZI输出域结束地址,
; 该值由符号变量Image$$ZI$$Limit取得
sub r2, r2, r1 ; R2 = R2 - R1,得出待拷贝数据长度
bl CopyCode2Ram ; 将R0,R1,R2三个参数传递给CopyCode2Ram函数执行拷贝

int isBootFrmNORFlash(void)
{
volatile unsigned long *pdw = (volatile unsigned long *)0;
unsigned long dwVal;

dwVal = *pdw;
*pdw = 0x12345678;
if (*pdw != 0x12345678)
{
return 1;
} else {
*pdw = dwVal;
return 0;
}
}



int CopyCode2Ram(unsigned long start_addr, unsigned char *buf, int size)
{
unsigned long *pdwDest;
unsigned long *pdwSrc;
unsigned long i;
int size1 = size;

if (isBootFrmNORFlash())
{
pdwDest = (unsigned long *)buf;
pdwSrc = (unsigned long *)start_addr;
/* copy code from NOR Flash to RAM */
for (i = 0; i < size1 / 4; i++)
{
pdwDest
 = pdwSrc;
}
return 0;
} else {
return 0;
}
}

上面是用c 写的复制代码到SDRAM 可是为什么烧进去的时候可以用,面调试时用不了呢?RO设为0x33ff0000,调试就在后面这个for (i = 0; i < size1 / 4; i++)里面死机了,看下了好象参数传过来是对的,但运行一下就变了?求帮忙?搞 了好久了就是不明白?
[ 本帖最后由 cxw3506 于 2012-2-27 14:02 编辑 ]

最新回复

CopyCode2Ram这个函数你后面是不检查了,你的返回值两种情况你都返回的0,第一种情况一般是返回1的  详情 回复 发表于 2012-2-27 19:48
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
看了一下,好像for 循环里两个地址没自加一啊,一直拷但地址没变,自然拷不进去
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 seasky208 的帖子

pdwDest=pdwSrc这里面有I在,不知道为什么发不上去的。不是这个原因,我烧进去是可以用的,就单步调试时,会出错。 [ 本帖最后由 cxw3506 于 2012-2-27 14:07 编辑 ]
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(高级)

4
 
CopyCode2Ram这个函数你后面是不检查了,你的返回值两种情况你都返回的0,第一种情况一般是返回1的
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 seasky208 的帖子

你好,这样返回倒没什么问题,问题是在那个for里面死掉了,那个size的值变成了0XCDCDCDCD了,第一次传过去时没错,值为0X257C,一执行就变了。关键一点是编译烧进去时没错,可以执行,但是调试时就不行了。
 
 
 

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

开源项目 更多>>
    查找数据手册?

    EEWorld Datasheet 技术支持

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

     
    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
    快速回复 返回顶部 返回列表