中级会员
 
- 积分
- 389
- 金钱
- 389
- 注册时间
- 2014-11-8
- 在线时间
- 40 小时
|

楼主 |
发表于 2015-3-27 00:23:40
|
显示全部楼层
回复【8楼】正点原子:
---------------------------------
oid 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);//显示内存容量
}
}
1.每隔4K字节,写入一个数据,总共写入256个数据,刚好是1M字节,原子哥你的这个程序为什么每隔4k写入一个数据,这个4k是随意选的吗?
2.原子哥你这个函数是不是在地址0写入0,在testsram[4096]处写入4096,可我单步调试却发现testsram[4096] = 4100,不知道为什么?
下面是我用的测试程序,我用j-link单步调试发现程序走完LCD_ShowxNum(60,190,testsram[4096],6,16,0);//显示测试数据 这句话,发现lcd上显示的是4100?难道不应该是4096吗?这是为什么?
while(1)
{
fsmc_sram_test(60,170);//测试SRAM容量
for(ts=0;ts<(4*1024-1);ts++)LCD_ShowxNum(60,190,testsram[ts],6,16,0);//显示测试数据
LCD_ShowxNum(60,190,testsram[4095],6,16,0);//显示测试数据
LCD_ShowxNum(60,190,testsram[4096],6,16,0);//显示测试数据
LCD_ShowxNum(60,190,testsram[4097],6,16,0);//显示测试数据
LCD_ShowxNum(60,190,testsram[4098],6,16,0);//显示测试数据
LCD_ShowxNum(60,190,testsram[4099],6,16,0);//显示测试数据
}
上面两张图片分别是对应的lcd显示的内容和单步调试程序,下面两个附件就是这两张图片,麻烦原子哥看一下。。。 |
-
-
|