OpenEdv-开源电子网

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

FATFS 读写连续操作的问题

[复制链接]

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-9-24
在线时间
36 小时
发表于 2020-6-29 17:20:36 | 显示全部楼层 |阅读模式
1金钱
操作步骤:
1. 挂载文件系统
2. 打开创建文件
3. 写文件
4.读文件
5.关闭文件

  1. <p>/* Gives a work area to the default drive */
  2.   res = f_mount(&fs, "", 0);
  3.   if (res)  while(1);

  4.   /* Create a file as new */
  5.   res = f_open(&fil, "hello.txt", FA_OPEN_ALWAYS | FA_WRITE | FA_READ );
  6. if (res)  while(1);

  7.   /* Write a message */
  8.   f_write(&fil, "Hello, World!\r\n", 15, &bw);
  9.   if (bw != 15) while(1);
  10.   
  11. //  f_close(&fil);
  12. //   
  13. //  res = f_open(&fil, "hello.txt",FA_READ);
  14. //  if (res) while(1);
  15.    
  16.   res = f_read(&fil, work, 15, &br);
  17.   if (res) while(1);
  18.   if (br != 15) while(1);</p><p>
  19. </p><p>/* Close the file */
  20.   f_close(&fil);
  21. </p>
复制代码
问题是: 打开文件写后再读 读取会失败,读到的br是0,除非先关闭文件再读才可以,看到这个帖子代表也是先关,请问这是什么回事? 平台MSP430
http://www.openedv.com/forum.php?mod=viewthread&tid=279885

最佳答案

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

可以,你写完以后f_seek指针应该指向了文件尾,把指针指向文件头
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2153

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4938
金钱
4938
注册时间
2015-1-10
在线时间
619 小时
发表于 2020-6-29 17:20:37 | 显示全部楼层
lugeyaoxuexi 发表于 2020-6-30 13:15
如果不关闭文件 执行一下 f_sync也行吗?

可以,你写完以后f_seek指针应该指向了文件尾,把指针指向文件头
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2020-6-29 17:54:15 | 显示全部楼层
把返回值都printf 出来看看  如果挂载和打开写入都是正常的  试下增加堆栈看看
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2020-6-29 21:06:00 | 显示全部楼层
我记得是写完了需要关闭,再读才可以
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-9-24
在线时间
36 小时
 楼主| 发表于 2020-6-30 08:59:56 | 显示全部楼层
login_FAE 发表于 2020-6-29 21:06
我记得是写完了需要关闭,再读才可以

这是什么原因
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-9-24
在线时间
36 小时
 楼主| 发表于 2020-6-30 09:14:40 | 显示全部楼层
翼行园子 发表于 2020-6-29 17:54
把返回值都printf 出来看看  如果挂载和打开写入都是正常的  试下增加堆栈看看

堆栈加的很大了,f_read返回FR_OK, 但是返回的字节长度还是0,
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-9-24
在线时间
36 小时
 楼主| 发表于 2020-6-30 10:16:09 | 显示全部楼层
各位大神。。。
回复

使用道具 举报

0

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
401
金钱
401
注册时间
2019-5-5
在线时间
150 小时
发表于 2020-6-30 11:17:08 | 显示全部楼层
不关闭的时候还在缓存里,没有真正写进去,只有在关闭或者刷新的时候才会把数据写进去
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-9-24
在线时间
36 小时
 楼主| 发表于 2020-6-30 13:15:14 | 显示全部楼层
石头君 发表于 2020-6-30 11:17
不关闭的时候还在缓存里,没有真正写进去,只有在关闭或者刷新的时候才会把数据写进去

如果不关闭文件 执行一下 f_sync也行吗?
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-9-24
在线时间
36 小时
 楼主| 发表于 2020-6-30 14:06:29 | 显示全部楼层
阿侑kevin 发表于 2020-6-30 13:25
可以,你写完以后f_seek指针应该指向了文件尾,把指针指向文件头

f_lseek一下立马好了非常给力,但是f_sync没起作用,读出的长度为0
回复

使用道具 举报

11

主题

2153

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4938
金钱
4938
注册时间
2015-1-10
在线时间
619 小时
发表于 2020-6-30 14:15:54 | 显示全部楼层
lugeyaoxuexi 发表于 2020-6-30 14:06
f_lseek一下立马好了非常给力,但是f_sync没起作用,读出的长度为0

f_sync只是将缓存数据同步进去,不会动指针,读的话还是需要f_lseek操作指针的
回复

使用道具 举报

11

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-9-24
在线时间
36 小时
 楼主| 发表于 2020-6-30 14:55:28 | 显示全部楼层
阿侑kevin 发表于 2020-6-30 14:15
f_sync只是将缓存数据同步进去,不会动指针,读的话还是需要f_lseek操作指针的

棒的一噻
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 02:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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