初级会员

- 积分
- 67
- 金钱
- 67
- 注册时间
- 2013-9-23
- 在线时间
- 2 小时
|
5金钱
程序基于ucosII,通过FATFS向TF卡中保存数据,具体有两种情况如下:
A、截屏:每读LCD上的一行数据(380个字节)到u16LineBuffer,使用f_write(&g_fdst,u16LineBuffer,380,&bw)写入一次,直到保存完整屏内容。其中关键代码如下:
if(res==FR_OK)//创建成功
{
res = f_write(&g_fdst,(u8*)&hbmp,bmpheadsize,&bw);//写入BMP首部
res = f_sync(&g_fdst);
for(j = 319; j>=0; j--) //将液晶从左向右从下到上读数据,因为bmp图像的扫描顺序是由左到右由下到上。
{
for(i = 0; i<190; i++)
{
u16LineBuffer = LCD_GetPoint(i,j); //读取坐标点的值
}
res = f_write(&g_fdst,u16LineBuffer,380,&bw); //写入数据 一行190*2个字节
res = f_sync(&g_fdst); //进行写保护
}
f_close(&g_fdst);
return 0;
}
B、一次写入大量数据:g_u8DataBuffer[]为一个全局变量,保存了大概15K的数据,通过f_write(&g_fdst,g_u8DataBuffer,15*1024,&bw)一次性写入。其中关键代码如下:
f_open(&g_fdst,(const TCHAR*)pszPicName,FA_CREATE_ALWAYS|FA_WRITE);
OSIntEnter();//管系统中断 进入临界区
f_write(&g_fdst,g_u8DataBuffer,15*1024,&bw);//一次写入15KB数据
OSIntExit();
f_close(&g_fdst);
运行程序后,发现A、B两种情况都会随机出现以下情况,并且B情况发生以下状况的概率高于A情况:
1、TF卡中保存数据的那个File文件夹被损坏打不开了。
2、File文件夹未被损坏但是数据不全,包括之前有n个数据,现在发现一个数据都没了,变成了空文件夹;或者本来应该有m+n个数据,但是只有m个。
3、文件夹未被损坏,但是文件夹变成了层层嵌套的情况,如File/File/File.......一直循环下去,无从打开File文件夹查看里面内容。
注:在数据丢失的情况下,一般都可以通过U盘数据恢复找回部分数据。
File文件夹外面有两个系统参数文件A.ini和B.ini一直都可以正常打开。
初步感觉是FATFS读写TF卡时,把文件系统损坏了,但是不知道如何解决,还请各位高手指点指点,谢谢! |
|