搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 2013-3-29 19:19:24 | 显示全部楼层 |阅读模式
本帖最后由 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一直都是正常的.
  1. /////////////////////////////////////////
  2. ///////////读取自生成的hzk文件,并调用nf_save_act函数存入数据
  3. ///////////使用指针变量返回nf_save_st(nandflash写入状态)
  4. ////////////2013.3.29
  5. u16 hzk_save_nf(nf_save_st * temp_save)
  6. {
  7. u16 res;
  8. u32 i=0;//
  9. u32 hzk_size=temp_save->unsave_size;//取得上次未存入nandflash的数据数量
  10. u8 temp_s1,temp_s2;//由asc点阵计算成二进制点阵的中间环节
  11. u8 is_dirty;//是否为点阵数据
  12. u8 *f_buff=(u8 *)(SDRAM_BASE+FILE_BUF*SDRAM_BLOCK);//文件缓冲区
  13. u8 *r_buff=(u8 *)0x200021E8;//(SDRAM_BASE+RLT_BUF*SDRAM_BLOCK);//结果缓冲区
  14. if(file.fsize+temp_save->unsave_size>SDRAM_BLOCK)return 1025;
  15. //res=f_read(&file,file.buf,50,&fbr);if(res)return res;//读取全部文件
  16. res=f_read(&file,f_buff,file.fsize,&fbr);if(res)return res;//读取全部文件
  17. for(i=0;i<11;i++)
  18.         r_buff[hzk_size++]=f_buff[i];//将文件11个信息字符直接存入 --------------------------如r_buff指向片外ram,在这里都出问题
  19. while(i<file.fsize)
  20.         {
  21.         is_dirty=0;temp_s1=f_buff[i++];//先将dirty置为零,并取得当前字符,遍历i增加
  22.         if((temp_s1>=0x30)&(temp_s1<=0x39)){temp_s1-=0x30;is_dirty=1;}
  23.         else if((temp_s1>=0x41)&(temp_s1<=0x46)){temp_s1-=0x37;is_dirty=1;}//如果当前字符符合规定,则取得其二制数,并置位dirty
  24.         if(is_dirty)//如取得到一个点阵数据则取得下一位点阵数据
  25.                 {
  26.                 temp_s1<<=4;temp_s2=f_buff[i++];//将第一个点阵数据移入高位,并取得第二个        ,遍历i增加
  27.                 if((temp_s2>=0x30)&(temp_s2<=0x39)){temp_s2-=0x30;is_dirty=1;}
  28.                 else if((temp_s2>=0x41)&(temp_s2<=0x46)){temp_s2-=0x37;is_dirty=1;}//如果当前字符符合规定,则取得其二制数,并置位dirty
  29.                
  30.                 r_buff[hzk_size++]=(temp_s1+=temp_s2);//计算出点阵数据,并存入结果缓冲区
  31.                 }
  32.         }
  33. nf_save_act(temp_save,r_buff,hzk_size,FALSE); //将缓冲区数据存入nandflash
  34. return 0;
  35. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2013-3-29 20:03:06 | 显示全部楼层
attach://100445.jpg
attach://100446.jpg
attach://100449.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-3-30 09:27:22 来自手机 | 显示全部楼层
说这么详细,但问题很奇怪,为什么在内部ram中可以,在外部ram中就运行出错呢?这才是问题的根源

出0入0汤圆

 楼主| 发表于 2013-4-1 20:35:35 | 显示全部楼层
最新情况,用字和半字访问都可以,但用字节访问不行

出0入0汤圆

发表于 2013-4-1 20:54:04 | 显示全部楼层
你的1788是在外部SDRAM运行?这个好像效率极不行~

出0入0汤圆

 楼主| 发表于 2013-4-1 23:47:39 来自手机 | 显示全部楼层
就那两个指针是在外部运行。
这段程序有效率点的办法吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 09:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表