硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4133|回复: 17
收起左侧

[FatFs] 请教下fatfs写数据耗时问题

[复制链接]

5

主题

20

回帖

35

积分

新手上路

积分
35
发表于 2019-1-11 15:52:57 | 显示全部楼层 |阅读模式
f_open (&file,"0:/test.txt", FA_OPEN_APPEND | FA_WRITE)  f_close(&file)

只执行文件的创建和关闭 耗时1ms

  f_open (&file,"0:/test.txt", FA_OPEN_APPEND | FA_WRITE)
  f_write(&file,buffer,sizeof(buffer),&bw)
  f_close(&file)

  执行文件创建和数据写入总耗时 14ms  ,f_wirte的执行时间1ms,  14ms究竟是耗在哪里呢
回复

使用道具 举报

5

主题

20

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-1-11 15:55:50 | 显示全部楼层
@eric2013   大神来这看下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-1-11 16:00:20 | 显示全部楼层
推荐打开后不要关闭,

f_write和f_sync操作即可。
回复

使用道具 举报

5

主题

20

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-1-11 16:06:19 | 显示全部楼层
eric2013 发表于 2019-1-11 16:00
推荐打开后不要关闭,

f_write和f_sync操作即可。

我测试过用f_close和f_sync耗时一样呀
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-1-11 16:09:24 | 显示全部楼层
嘿啦_OpDfP 发表于 2019-1-11 16:06
我测试过用f_close和f_sync耗时一样呀

这种耗时在你做批量读写的时候才会发挥优势。

单单一个f_open和f_close随着你不断的写入,打开一个文件都非常耗时间。

你现在做一个这样的测试,测试1万次。

单独计数函数f_open,f_write,f_close的时间变化。
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2019-1-11 16:21:21 | 显示全部楼层
因为你写入的数据少于一个扇区大小,f_write把你写入的数据复制到内部缓冲区中并没有实际写入磁盘,当你f_close时才真正写入磁盘。所以14ms耗在f_close里面。
回复

使用道具 举报

5

主题

20

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-1-11 16:32:23 | 显示全部楼层
novice 发表于 2019-1-11 16:21
因为你写入的数据少于一个扇区大小,f_write把你写入的数据复制到内部缓冲区中并没有实际写入磁盘,当你f_c ...

那如果写入数据大于或者等于一个扇区的大小呢,耗时会怎样
回复

使用道具 举报

5

主题

20

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-1-11 16:33:55 | 显示全部楼层
嘿啦_OpDfP 发表于 2019-1-11 16:32
那如果写入数据大于或者等于一个扇区的大小呢,耗时会怎样

用f_sync的话f_write会直接把数据写入磁盘吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-1-12 00:06:04 | 显示全部楼层
嘿啦_OpDfP 发表于 2019-1-11 16:33
用f_sync的话f_write会直接把数据写入磁盘吗

是的。
回复

使用道具 举报

5

主题

20

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-1-13 23:33:32 | 显示全部楼层

那用f_sync结尾的话  想再重新打开文件  得在f_sync之后加f_close吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-1-14 00:39:39 | 显示全部楼层
嘿啦_OpDfP 发表于 2019-1-13 23:33
那用f_sync结尾的话  想再重新打开文件  得在f_sync之后加f_close吗

打开其他文件不影响这个。
回复

使用道具 举报

5

主题

20

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-1-14 10:46:07 | 显示全部楼层
eric2013 发表于 2019-1-14 00:39
打开其他文件不影响这个。

请问下  open为读模式  ,然后读N字节后  下次还想追加读N字节,可以在读完之后以F_SYNC结尾吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-1-15 00:18:30 | 显示全部楼层
嘿啦_OpDfP 发表于 2019-1-14 10:46
请问下  open为读模式  ,然后读N字节后  下次还想追加读N字节,可以在读完之后以F_SYNC结尾吗

不可,要关闭后,打开写属性,这种问题,找个卡多溜溜。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2023-5-15 20:35:27 | 显示全部楼层
请问您解决了,我能问一下怎么解决的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-5-17 18:05:55 | 显示全部楼层
blind3486329 发表于 2023-5-15 20:35
请问您解决了,我能问一下怎么解决的吗?

用我回复的方法就可以。
回复

使用道具 举报

5

主题

13

回帖

28

积分

新手上路

积分
28
发表于 2023-5-22 22:19:04 | 显示全部楼层
novice 发表于 2019-1-11 16:21
因为你写入的数据少于一个扇区大小,f_write把你写入的数据复制到内部缓冲区中并没有实际写入磁盘,当你f_c ...

大佬能具体说说嘛
回复

使用道具 举报

5

主题

13

回帖

28

积分

新手上路

积分
28
发表于 2023-5-22 22:19:55 | 显示全部楼层
大佬们,FATFS写入多个文件速度很慢,如何解决呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-5-23 08:01:11 | 显示全部楼层
回不去的时间 发表于 2023-5-22 22:19
大佬们,FATFS写入多个文件速度很慢,如何解决呢

写入一个文件后,考虑卸载,重新加载一次。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 05:56 , Processed in 0.208319 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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