前段时间在SD卡上移植了FatFs文件系统,昨晚在QQ群中看到znFat,于是有了想测试一下两个文件系统的速度差异的想法。
znFat移植很简单,就是在deviceio.c中写入相应的函数即可,然后配置config.h中的宏。今天在振南的协助下把速度配置到全速模式下。
硬件平台:LPC1768使用SSP0,SSP0时钟50MHz
测试文件wmv视频文件,大小:7375.689 KB(7552706 Bytes)
每次读写以4KByte操作,操作流程如下 :
1、打开源文件和目标文件
2、读源文件内容,读取4K字节
3、写文件,将4K字节写入目标文件(在测试读取速度时屏蔽写操作)
4、重复步骤2-3,直到源文件读取完成
其中写入速度是根据拷贝时间和读取时间来计算出写入时间而得到的。
测试结果如下:
FatFs拷贝代码如下:
for (;;)
{
//res = f_read(&fSrc,buff,sizeof buff,&br);
res = f_read(&fSrc,buff,COPY_LEN,&br);
if (res || br == 0)
{
if(fileSrcPos < fileLen)
Debug_Printf("拷贝文件时读取时出错:res=0x%02X,bw = %d,fileSrcPos = %d \r\n",res,bw,fileSrcPos);
break;
}
res = f_write(&fDst,buff,br,&bw);
if (res || bw < br)
{
Debug_Printf("拷贝文件时写入时出错:res=0x%02X,bw = %d,fileSrcPos = %d \r\n",res,bw,fileSrcPos);
bw = 0;
Debug_Printf("读取到%d字节的内容如下:\r\n",br);
while (br--)
{
Debug_Printf("%02X ",buff[bw]);
bw++;
}
Debug_Printf("\r\n");
break;
}
fileSrcPos += br;
}
znFat拷贝代码如下:
while(len=znFAT_ReadData(&fileinfo1,fileinfo1.File_CurOffset,COPY_LEN,buff)) //从当前偏移位置读取数据 { znFAT_WriteData(&fileinfo2,len,buff); //将读到的数据写入到znmcu2.txt文件中 //printf("%c",'.'); }