FATFS写入数据全是0

2019-07-20 07:16发布

用的是STM32F405+R0.09的FATFS。加入给你一张刚格式化的干净的卡,就做简单的读写测试,是没问题的。连续的短时间写入也没问题的。
但是,我程序是用定时器连续的将惯性数据以每隔5分钟的频率就新建一个文件存储数据,当存储的文件数大于几十个的时候(每个文件821KB),比如90个,后面的写入不会提示错误,文件也创建了,文件大小也有了。但是数据全部都是0.也就是说文件名称是有的,PC上也显示文件的大小,但是读取的数据全部都是0
PS:大家可以把焦点更多放在TF卡的文件系统各种限制上,因为一般写入几十个文件都不会出问题的。有没有遇到过同样的问题,万分感激啊






初始化:
        fs = &fatfs;

        res=f_mount(0, fs);

递增创建文件的代码:
  do
    {
        sprintf(file_name,"imu/IMU_%d.1bsn",file_num);
        if(flag_format==1)
        break;
        res = f_open( &fsrc,(char*)file_name, FA_CREATE_NEW | FA_WRITE);
                printf("扫描中....%s,创造返回代码:%d ",file_name,res);
          if(res==FR_EXIST)
          file_num++;
    }while(res!=FR_OK);
                printf("创造完毕,刚才创造的文件名为:%s.. ",file_name);

写入的代码:
  res = f_write(&fsrc,TF_Packet,sizeof(TF_Packet), &br);


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
szczyb1314
1楼-- · 2019-07-21 01:00
打开文件不要用 FA_CREATE_NEW这个创建新文件好不,每次都重新创建一个新文件覆盖旧文件能不是全0吗
mnz119
2楼-- · 2019-07-21 06:36
 精彩回答 2  元偷偷看……
mnz119
3楼-- · 2019-07-21 10:20
szczyb1314 发表于 2018-7-10 14:09
打开文件不要用 FA_CREATE_NEW这个创建新文件好不,每次都重新创建一个新文件覆盖旧文件能不是全0吗

谢谢回复,这个是没毛病的,因为用FA_CREATE_NEW创建文件,其实不单是创建文件,还判断当前编号的即将创建的文件是否存在,如果存在了说明这编号命名的文件就不能创建了,再往后递增一个数,创建新的编号的文件。至于写入,是不会出现你说的这种问题的,当前写入的是当前编号的文件,下次新的编号对应的文件创建了,就会写入下次的创建的文件。参考给原子哥的截图。
mnz119
4楼-- · 2019-07-21 11:32
 精彩回答 2  元偷偷看……
mnz119
5楼-- · 2019-07-21 14:15
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-07-21 16:08
mnz119 发表于 2018-7-11 10:17

每个fatfs函数的调用,都要判断返回值!!
否则代码就不好找问题。

一周热门 更多>