OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5553|回复: 4

外部sram实验

[复制链接]

22

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2015-5-4
在线时间
34 小时
发表于 2015-10-27 13:47:41 | 显示全部楼层 |阅读模式
5金钱
 STM32F4开发指南第41章中,我对这个函数有点不解,想请原子哥和各位大哥帮我解答一下
//外部内存测试(最大支持1M字节内存测试)        
void fsmc_sram_test(u16 x,u16 y)  
{   
       u32 i=0;            
       u8 temp=0;         
       u8 sval=0;      //在地址0读到的数据                                  
      LCD_ShowString(x,y,239,y+16,16,"Ex Memory Test:   0KB");  
       //每隔4K字节,写入一个数据,总共写入256个数据,刚好是1M字节  
       for(i=0;i<1024*1024;i+=4096)  
       {  
              FSMC_SRAM_WriteBuffer(&temp,i,1);  
              temp++;  
       }  
       //依次读出之前写入的数据,进行校验           
      for(i=0;i<1024*1024;i+=4096)  
       {  
             FSMC_SRAM_ReadBuffer(&temp,i,1);  
              if(i==0)sval=temp;  
             else if(temp<=sval)break;//后面读出的数据一定要比第一次读到的数据大.    
              LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*4,4,16,0);//显示内存容量   
      }                                  
}   
这个函数中,       //依次读出之前写入的数据,进行校验      FSMC_SRAM_ReadBuffer(&temp,i,1);之后没有temp++,temp不就一直等于0了吗?显示内存容量就是0啊??我哪里理解错了呢?

最佳答案

查看完整内容[请看2#楼]

注意:在写循环里temp++是写入的数值在不断增加,在读循环里读出的数值temp是后面比前面大。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10566
金钱
10566
注册时间
2014-6-12
在线时间
1022 小时
发表于 2015-10-27 13:47:42 | 显示全部楼层
注意:在写循环里temp++是写入的数值在不断增加,在读循环里读出的数值temp是后面比前面大。
回复

使用道具 举报

22

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2015-5-4
在线时间
34 小时
 楼主| 发表于 2015-10-28 09:02:18 | 显示全部楼层
回复【2楼】xuyaqi:
---------------------------------
LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*4,4,16,0);//显示内存容量
那temp-sval+1=1了,怎么显示内存容量呢?
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10566
金钱
10566
注册时间
2014-6-12
在线时间
1022 小时
发表于 2015-10-29 07:46:24 | 显示全部楼层
回复【3楼】shblh:
---------------------------------
这里读出的temp是逐步变大的,sval是第一次读到的temp,后来读到的temp不等于sval。
回复

使用道具 举报

22

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2015-5-4
在线时间
34 小时
 楼主| 发表于 2015-10-30 08:49:46 | 显示全部楼层
回复【4楼】xuyaqi:
---------------------------------
自己C语言功底太差了,我昨天单步运行了一下,终于明白了
    for(i=0;i<1024*1024;i+=4096)  
       {  
             FSMC_SRAM_ReadBuffer(&temp,i,1);  
              if(i==0)sval=temp;  
             else if(temp<=sval)break;//后面读出的数据一定要比第一次读到的数据大.    
              LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*4,4,16,0);//显示内存容量   
      }  
依次运行后的temp就是 之前每隔4K字节写入的数据
谢谢你了~
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 12:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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