OpenEdv-开源电子网

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

FATFS向TF写数据,数据丢失

[复制链接]

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-9-23
在线时间
2 小时
发表于 2015-9-11 10:16:22 | 显示全部楼层 |阅读模式
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卡时,把文件系统损坏了,但是不知道如何解决,还请各位高手指点指点,谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-9-23
在线时间
2 小时
 楼主| 发表于 2015-9-11 19:22:29 | 显示全部楼层
尝试了裸系统运行发现连续保存了4000张图片都没问题,然后回到ucos,扩大了临界区,结果也正常了,不过还在进一步测试确认中。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-9-11 22:46:01 | 显示全部楼层
这个一定要防止多任务同时访问文件系统的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-9-23
在线时间
2 小时
 楼主| 发表于 2015-9-12 18:12:44 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
是的,这次领教了不注意这个问题的后果。
后来又写了一个单任务的程序来执行,结果也一切正常。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 06:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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