请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 266|回复: 12
收起左侧

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

[复制链接]

5

主题

25

帖子

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

主题

25

帖子

35

积分

新手上路

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

使用道具 举报

5893

主题

3万

帖子

4万

积分

管理员

健健康康的活着

Rank: 9Rank: 9Rank: 9

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

f_write和f_sync操作即可。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5

主题

25

帖子

35

积分

新手上路

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

f_write和f_sync操作即可。

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

使用道具 举报

5893

主题

3万

帖子

4万

积分

管理员

健健康康的活着

Rank: 9Rank: 9Rank: 9

积分
47307
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的时间变化。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5

主题

209

帖子

219

积分

高级会员

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

使用道具 举报

5

主题

25

帖子

35

积分

新手上路

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

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

使用道具 举报

5

主题

25

帖子

35

积分

新手上路

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

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

使用道具 举报

5893

主题

3万

帖子

4万

积分

管理员

健健康康的活着

Rank: 9Rank: 9Rank: 9

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

是的。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5

主题

25

帖子

35

积分

新手上路

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

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

使用道具 举报

5893

主题

3万

帖子

4万

积分

管理员

健健康康的活着

Rank: 9Rank: 9Rank: 9

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

打开其他文件不影响这个。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5

主题

25

帖子

35

积分

新手上路

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

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

使用道具 举报

5893

主题

3万

帖子

4万

积分

管理员

健健康康的活着

Rank: 9Rank: 9Rank: 9

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

不可,要关闭后,打开写属性,这种问题,找个卡多溜溜。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-7-20 00:37 , Processed in 0.197525 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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