|
本帖最后由 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[hzk_size++]=f_buff[i];//将文件11个信息字符直接存入 --------------------------如r_buff指向片外ram,在这里都出问题
- while(i<file.fsize)
- {
- is_dirty=0;temp_s1=f_buff[i++];//先将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++];//将第一个点阵数据移入高位,并取得第二个 ,遍历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[hzk_size++]=(temp_s1+=temp_s2);//计算出点阵数据,并存入结果缓冲区
- }
- }
- nf_save_act(temp_save,r_buff,hzk_size,FALSE); //将缓冲区数据存入nandflash
- return 0;
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|