liuswallow 发表于 2013-3-29 19:19:24

同样的程序工作于片内RAM正常,工作在片外RAM就不正常

本帖最后由 liuswallow 于 2013-3-29 20:01 编辑

单片机使用的是1788,片外ram为h57v256,编程器是jlinkv8
当r_buff指向0x200021E8用keil->memory查看完全正常.但指向外部sdram执行结果就不正确了.
sram已初始化,并做了sram校验,应该是没有问题的,并且即使要r_buff指向内存RAM,f_buff也是使用的外部的,而f_buff一直都是正常的./////////////////////////////////////////
///////////读取自生成的hzk文件,并调用nf_save_act函数存入数据
///////////使用指针变量返回nf_save_st(nandflash写入状态)
////////////2013.3.29
u16 hzk_save_nf(nf_save_st * temp_save)
{
u16 res;
u32 i=0;//
u32 hzk_size=temp_save->unsave_size;//取得上次未存入nandflash的数据数量
u8 temp_s1,temp_s2;//由asc点阵计算成二进制点阵的中间环节
u8 is_dirty;//是否为点阵数据
u8 *f_buff=(u8 *)(SDRAM_BASE+FILE_BUF*SDRAM_BLOCK);//文件缓冲区
u8 *r_buff=(u8 *)0x200021E8;//(SDRAM_BASE+RLT_BUF*SDRAM_BLOCK);//结果缓冲区
if(file.fsize+temp_save->unsave_size>SDRAM_BLOCK)return 1025;
//res=f_read(&file,file.buf,50,&fbr);if(res)return res;//读取全部文件
res=f_read(&file,f_buff,file.fsize,&fbr);if(res)return res;//读取全部文件
for(i=0;i<11;i++)
        r_buff=f_buff;//将文件11个信息字符直接存入 --------------------------如r_buff指向片外ram,在这里都出问题
while(i<file.fsize)
        {
        is_dirty=0;temp_s1=f_buff;//先将dirty置为零,并取得当前字符,遍历i增加
        if((temp_s1>=0x30)&(temp_s1<=0x39)){temp_s1-=0x30;is_dirty=1;}
        else if((temp_s1>=0x41)&(temp_s1<=0x46)){temp_s1-=0x37;is_dirty=1;}//如果当前字符符合规定,则取得其二制数,并置位dirty
        if(is_dirty)//如取得到一个点阵数据则取得下一位点阵数据
                {
                temp_s1<<=4;temp_s2=f_buff;//将第一个点阵数据移入高位,并取得第二个        ,遍历i增加
                if((temp_s2>=0x30)&(temp_s2<=0x39)){temp_s2-=0x30;is_dirty=1;}
                else if((temp_s2>=0x41)&(temp_s2<=0x46)){temp_s2-=0x37;is_dirty=1;}//如果当前字符符合规定,则取得其二制数,并置位dirty
               
                r_buff=(temp_s1+=temp_s2);//计算出点阵数据,并存入结果缓冲区
                }
        }
nf_save_act(temp_save,r_buff,hzk_size,FALSE); //将缓冲区数据存入nandflash
return 0;
}

liuswallow 发表于 2013-3-29 20:03:06

attach://100445.jpg
attach://100446.jpg
attach://100449.jpg

liuswallow 发表于 2013-3-30 09:27:22

说这么详细,但问题很奇怪,为什么在内部ram中可以,在外部ram中就运行出错呢?这才是问题的根源

liuswallow 发表于 2013-4-1 20:35:35

最新情况,用字和半字访问都可以,但用字节访问不行

nongxiaoming 发表于 2013-4-1 20:54:04

你的1788是在外部SDRAM运行?这个好像效率极不行~

liuswallow 发表于 2013-4-1 23:47:39

就那两个指针是在外部运行。
这段程序有效率点的办法吗
页: [1]
查看完整版本: 同样的程序工作于片内RAM正常,工作在片外RAM就不正常