OpenEdv-开源电子网

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

已被外部sram搞晕

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2014-11-4
在线时间
0 小时
发表于 2015-5-22 22:43:14 | 显示全部楼层 |阅读模式
对于那个往外部sram写数据函数
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)  
{    
*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;  
WriteAddr++;
pBuffer++;
}   
}
对于红色标记那一句不是很懂。在8位的情况下,STM32地址+1我应该算懂。但是结合下面这个代码,就有点晕了
for(i=0;i<1024*8;i+=1024)   //原子哥代码原来是for(i=0;i<1024*1024;i+=4096),就是隔4KB放一个,我为了说明就改了下
{
FSMC_SRAM_WriteBuffer(&temp,i,1);
temp++;
}
假设n一直为1,上面那个for(;n!=0;n--)  和for(i=0;i<1024*1024;i+=4096) 这两个循环一对比,假设外部sram地址从0开始,
我按照程序执行下去,假设隔1KB放一个数据,假设有个8位a[8]数组,依次放到外部sram的地址空间
。如下图


那这样放数据就不是隔1KB,而是隔了1KB+1个地址了。
是不是我理解错了?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-22 23:28:04 | 显示全部楼层
 n一直未1,那就循环都无法跳出来了。。。 
[mw_shl_code=c,true]u8 system_exsram_test(u16 x,u16 y,u8 fsize) { u32 i=0; u16 temp=0; u16 sval=0; //在地址0读到的数据 LCD_ShowString(x,y,lcddev.width,y+fsize,fsize,"Ex Memory Test: 0KB"); //每隔1K字节,写入一个数据,总共写入1024个数据,刚好是1M字节 for(i=0;i<1024*1024;i+=1024) { FSMC_SRAM_WriteBuffer((u8*)&temp,i,2); temp++; } //依次读出之前写入的数据,进行校验 for(i=0;i<1024*1024;i+=1024) { FSMC_SRAM_ReadBuffer((u8*)&temp,i,2); if(i==0)sval=temp; else if(temp<=sval)break;//后面读出的数据一定要比第一次读到的数据大. LCD_ShowxNum(x+15*(fsize/2),y,(u16)(temp-sval+1),4,fsize,0);//显示内存容量 }[/mw_shl_code]


我们例程代码是这样的。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-5-23
在线时间
3 小时
发表于 2015-5-23 10:05:57 | 显示全部楼层
存储完一个存储块应该要加1吧。
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2014-11-4
在线时间
0 小时
 楼主| 发表于 2015-5-23 12:17:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我那个n一直为1,是指一直把n=1带入for循环。。不能一直都等于1。。。。按照代码的话,存储数据不是每隔1kb+1个地址存放吗?
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2014-11-4
在线时间
0 小时
 楼主| 发表于 2015-5-23 12:18:43 | 显示全部楼层
回复【3楼】中国微电脑网:
---------------------------------
真的吗?对存储数据的地址这些有些懵
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2014-11-4
在线时间
0 小时
 楼主| 发表于 2015-5-23 12:19:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
还是说像2楼说的,存储完一个存储块要+1??
回复 支持 反对

使用道具 举报

1

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-5-23
在线时间
3 小时
发表于 2015-5-23 12:43:48 | 显示全部楼层
我在STC的EEPROM中加存储块内存变量和存储块位置变量,存满一个存储块,存储块位置再加1,不知道这样是不是你想解决的方案。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-23 23:19:18 | 显示全部楼层
回复【4楼】763504843@qq.com:
---------------------------------
那你一次就只存储了1个字节了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2018-8-31
在线时间
115 小时
发表于 2018-11-24 15:39:35 | 显示全部楼层
763504843@qq.co 发表于 2015-5-23 12:17
回复【2楼】正点原子:
---------------------------------
我那个n一直为1,是指一直把n=1带入for循环。。 ...

再次调用,在1K、2K。。等又从新调用赋值了,并不是你说的+2 +3
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 05:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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