OpenEdv-开源电子网

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

FATFS文件系统,文件追加的时候发现速度越来越慢,发现可以优化f_lseek 不知道怎么做 求指教???

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-11-11
在线时间
1 小时
发表于 2016-11-11 09:36:47 | 显示全部楼层 |阅读模式
3金钱

每10M检测一次ADC的值转化后以追加的方式写入SD,发现速度越来越慢,后面直接没有显示了!!

[mw_shl_code=c,true]
            samp_value=adc_ch6*3.6/1024;
            len=sprintf(sample_value,"%6.5f\t",samp_value);
            printf("%6.5f",samp_value);
            printf("\n");
            
        f_lseek(&file,f_size(&file));
        res=f_write(&file,sample_value,len,&br);
        if(res==0)
        { printf("write ok");}
        f_sync(&file);[/mw_shl_code]

发现是F_lseek函数的时间变长了,所以10ms循环bu够,现在想用快速的seek 不知道怎么用试了好多次没办法 求有经验的知道一下 急!急!急!

最佳答案

查看完整内容[请看2#楼]

f_open的第三个参数mode设置的是什么?? 如果设置了FA_OPEN_APPEND,那么对文件的写入就是附加模式,即在文件尾部追加写入内容,这样你就不用使用seek了,每次写入都是在文件尾部附加。 这个直接搜索fatfs找到其官方网站,官网对fatfs的各种api都有详细说明,需要什么功能直接读说明就可以了。 实际上,不管是linux或者windows或者其他系统下的文件系统,大家需要实现的api都差不多, 都要实现open、read、write、flush ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2016-11-11 09:36:48 | 显示全部楼层
本帖最后由 mack13013 于 2016-11-11 11:02 编辑

f_open的第三个参数mode设置的是什么??  如果设置了FA_OPEN_APPEND,那么对文件的写入就是附加模式,即在文件尾部追加写入内容,这样你就不用使用seek了,每次写入都是在文件尾部附加。


这个直接搜索fatfs找到其官方网站,官网对fatfs的各种api都有详细说明,需要什么功能直接读说明就可以了。

实际上,不管是linux或者windows或者其他系统下的文件系统,大家需要实现的api都差不多,
都要实现open、read、write、flush、close几种功能,而且几种API的内部功能也都要差不多实现,
比如open,大多都要对其指定权限(比如读、写、新建、附加等方式或者权限),几乎所有的文件系统的open
都有指定这些权限(当然一般的open也要指定路径)。其他api类似。

所以不管是哪种文件系统,大约你使用任意一种平台下的文件系统操作文件熟练之后,基本上所有的文件系统
的文件操作你大概也就都会了。只要熟悉一种之后,其他的基本上你需要什么样的操作,你大概就会知道,该
文件系统在某个地方应该有个实现什么功能的api,然后去查一下说明就OK了。

回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-11-11 10:08:36 | 显示全部楼层
应该是将每簇的扇区数增加,即_MAX_SS增大,这样会省去很多找簇时间,速度也会快很多       
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-12-23
在线时间
6 小时
发表于 2017-3-31 17:12:46 | 显示全部楼层
额。为什么我的FATFS文件系统  f_open 的第三个参数mode 没有FA_OPEN_APPEND呢。???

#if !_FS_READONLY
#define        FA_WRITE                        0x02
#define        FA_CREATE_NEW                0x04
#define        FA_CREATE_ALWAYS        0x08
#define        FA_OPEN_ALWAYS                0x10
#define FA__WRITTEN                        0x20
#define FA__DIRTY                        0x40
#endif
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-6-20
在线时间
12 小时
发表于 2017-4-14 22:07:20 | 显示全部楼层
/* 移动文件读/写指针到文件结束处,以便添加数据 */    res = f_lseek(file, file->fsize);
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-6-20
在线时间
12 小时
发表于 2017-4-14 22:09:08 | 显示全部楼层
http://www.forwhat.cn/post-205.html  中有一例子:        /* 移动文件读/写指针到文件结束处,以便添加数据 */    res = f_lseek(file, file->fsize);
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-12
在线时间
1 小时
发表于 2017-4-22 17:47:19 | 显示全部楼层
可以试下 http://ranfs.com  fat文件系统
回复

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-11-1
在线时间
50 小时
发表于 2017-5-16 10:10:28 | 显示全部楼层
mack13013 发表于 2016-11-11 09:36
f_open的第三个参数mode设置的是什么??  如果设置了FA_OPEN_APPEND,那么对文件的写入就是附加模式,即在 ...

你好,我在使用FA_OPEN_APPEND这个参数写文件的时候,一共四个文件,出现了一个文件损坏掉的情况,请问您之前遇到过吗
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2017-5-16 16:22:16 | 显示全部楼层
talenthn 发表于 2017-5-16 10:10
你好,我在使用FA_OPEN_APPEND这个参数写文件的时候,一共四个文件,出现了一个文件损坏掉的情况,请问您 ...

文件损坏说实话我没遇到过。只要不出现意外掉电情况,即使是被中断强抢了操作,也不会出现文件损坏。

实在不行可以写到buff里,最后统一一次写入(如果文件比较大,单片机下显然不可行,PC下可以)
在每次写入完成后flush(sync)一下,一般只有在flush过程中出现意外才会出现文件损坏。
回复

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-11-1
在线时间
50 小时
发表于 2017-5-16 21:31:52 | 显示全部楼层
mack13013 发表于 2017-5-16 16:22
文件损坏说实话我没遇到过。只要不出现意外掉电情况,即使是被中断强抢了操作,也不会出现文件损坏。

...

哦哦,但是我发现write后使用sync的时候容易出现异常数据(多数据或少数据),因为我用到四个串口,分别存到四个文件里,这个大神遇到过没
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2017-5-17 21:32:37 | 显示全部楼层
talenthn 发表于 2017-5-16 21:31
哦哦,但是我发现write后使用sync的时候容易出现异常数据(多数据或少数据),因为我用到四个串口,分别 ...

如果出现异常数据,那就通读一下FsFat,看下有没有哪里强制要求字节对齐,或者SDIO驱动里有没有问题,SDIO有没有文件打开数量限制等等。

按道理,用几个串口存到几个文件里不是出现数据异常的原因,因为FsFat或者SDIO的驱动连这个都解决不好的话,根本就不会发布的。

自己那部分代码也再仔细检查一下(可能性比较大),任何一个细节都不要放过,如果有可能,多做做codereview,容易发现问题
回复

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-11-1
在线时间
50 小时
发表于 2017-5-18 15:10:28 | 显示全部楼层
mack13013 发表于 2017-5-17 21:32
如果出现异常数据,那就通读一下FsFat,看下有没有哪里强制要求字节对齐,或者SDIO驱动里有没有问题,SDI ...

感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新版本才有的功能
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2018-8-31 16:09:08 | 显示全部楼层
talenthn 发表于 2017-5-18 15:10
感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新 ...

你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2018-8-31 16:09:09 | 显示全部楼层
talenthn 发表于 2017-5-18 15:10
感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新 ...

你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2018-8-31 16:09:09 | 显示全部楼层
talenthn 发表于 2017-5-18 15:10
感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新 ...

你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2018-8-31 16:09:09 | 显示全部楼层
talenthn 发表于 2017-5-18 15:10
感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新 ...

你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2018-8-31 16:09:09 | 显示全部楼层
talenthn 发表于 2017-5-18 15:10
感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新 ...

你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2018-8-31 16:09:10 | 显示全部楼层
talenthn 发表于 2017-5-18 15:10
感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新 ...

你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2018-8-31 16:09:10 | 显示全部楼层
talenthn 发表于 2017-5-18 15:10
感谢大神的指点。我一直在怀疑是不是新出的.12c版本关于追加方式FA_OPEN_APPEND是否存在BUG呢毕竟是新 ...

你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢
回复

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-3-1
在线时间
7 小时
发表于 2019-3-12 16:38:24 | 显示全部楼层
talenthn 发表于 2017-5-16 21:31
哦哦,但是我发现write后使用sync的时候容易出现异常数据(多数据或少数据),因为我用到四个串口,分别 ...

您的问题解决了么,我这边也有类似的问题,使用open,sync操作会占用资源,影响串口接收数据,导致串口接收数据丢帧。不执行sync,一直write则没有问题
回复

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-3-1
在线时间
7 小时
发表于 2019-3-12 16:40:40 | 显示全部楼层
mack13013 发表于 2017-5-16 16:22
文件损坏说实话我没遇到过。只要不出现意外掉电情况,即使是被中断强抢了操作,也不会出现文件损坏。

...

请教下载单片机下写文件应该是个什么流程机制呢?我这边有个问题,使用open,sync操作会占用资源,影响串口接收数据,导致串口接收数据丢帧。文件只打开一次,不执行sync,一直write则没有问题,但是问题就来了,我该什么时候sync或close文件 ,实现保存么
回复

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-11-1
在线时间
50 小时
发表于 2019-5-22 19:19:27 | 显示全部楼层
俊志俊 发表于 2019-3-12 16:38
您的问题解决了么,我这边也有类似的问题,使用open,sync操作会占用资源,影响串口接收数据,导致串口接 ...

我用的时候也不执行sync,这个命令有点问题
回复

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-11-1
在线时间
50 小时
发表于 2019-5-22 19:20:57 | 显示全部楼层
Bunny17 发表于 2018-8-31 16:09
你好,请问是不是这样改成FA_OPEN_APPEND,就解决了存储速度越来越慢的问题呢

我使用FA_OPEN_APPEND这个命令的时候出错,所以还是使用传统f_lseek方式寻末尾进行添加
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-17
在线时间
2 小时
发表于 2020-4-28 10:46:45 | 显示全部楼层
俊志俊 发表于 2019-3-12 16:40
请教下载单片机下写文件应该是个什么流程机制呢?我这边有个问题,使用open,sync操作会占用资源,影响串 ...

我也想知道这个问题,
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-17
在线时间
2 小时
发表于 2020-4-28 10:49:51 | 显示全部楼层

我该什么时候sync或close文件 ,实现保存么,

俊志俊 发表于 2019-3-12 16:40
请教下载单片机下写文件应该是个什么流程机制呢?我这边有个问题,使用open,sync操作会占用资源,影响串 ...

我想知道这个问题,大神们
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 13:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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