OpenEdv-开源电子网

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

求助原子哥,FATFS文件指针的移动操作

[复制链接]

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
发表于 2016-5-11 08:41:31 | 显示全部楼层 |阅读模式
5金钱
最近想做一个GPS定位,外加SD卡存储GPS信息。但是不知道怎么操作读写指针,LCD显示是按照我意思,但是打开SD卡之后看到的
写入的数不是自己想要的,主要是数据不全。我的想法是:第一次写入10个字符(先写6个,然后后面4个是回车换行),然后再写入
10个字符,但是发现第一次写入的数据被覆盖了,这个是写指针的问题吧?读指针应该没有问题吧?
//////////////////////////////////////////////////////////////这是我程序//////////////////////////////////////////////////////////////////////       
        //定义变量
         FIL fil;
         FRESULT res;
         UINT bww;
         char buf[50];
         //创建文件
          res=f_open(&fil,"0:/message.txt", FA_CREATE_ALWAYS|FA_WRITE);                 
          f_close(&fil);

          //写10个字符
          res=f_open (&fil,"0:/message.txt", FA_WRITE|FA_READ);       
          f_write (&fil, "ABCDEF\r\n", 10, &bww);        //写6个字符,加回车换行
          f_lseek(file,10); //移动指针       
          f_close(&fil);
       
          res=f_open(&fil,"0:/message.txt", FA_WRITE|FA_READ);  
          f_read (&fil, buf,10,&bww);       
          f_close(&fil);
          LCD_ShowString(10,300,230,24,24,(u8 *)buf);

           //写10个字符
          res=f_open (&fil,"0:/message.txt", FA_WRITE|FA_READ);       
         f_lseek(file,20); //移动指针       
          f_write(&fil, "BBCDEFGHJK", 10, &bww);       
          f_close(&fil);
       
          res=f_open(&fil,"0:/message.txt", FA_WRITE|FA_READ);
          f_lseek(file,20); //移动指针         
          f_read (&fil, buf,10,&bww);       
          f_close(&fil);
          LCD_ShowString(10,340,230,24,24,(u8 *)buf);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
当我改了一下写指针的时候发现第二次写的10字符没有显示出来,
程序是这样改的
//写10个字符,第二次写
          res=f_open (&fil,"0:/message.txt", FA_WRITE|FA_READ);       
          f_lseek(file,20); //移动指针       
          f_write(&fil, "BBCDEFGHJK", 10, (&bww)+10);       
          f_close(&fil);

这是实验效果,和自己想法不一样

这是实验效果,和自己想法不一样

我的目的是想要达到这样

我的目的是想要达到这样

最佳答案

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

1,fatfs的操作,尽量对返回值进行判断,以便做出错检查。 2,写一个简单的代码测试下(就写2次,按自己思路写。)3,注意:f_write和f_read操作之后,文件指针会自动偏移的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-5-11 08:41:32 | 显示全部楼层
1,fatfs的操作,尽量对返回值进行判断,以便做出错检查。  2,写一个简单的代码测试下(就写2次,按自己思路写。)3,注意:f_write和f_read操作之后,文件指针会自动偏移的。
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-5-12 19:04:40 | 显示全部楼层
这个知道的,我连续测试写入180字节,然后在多次写入,每次写入180字节,这样我在自己创建的这一个文件里面能写入多少数据,是最大4GB吗???我今天测试了一下午,发现只能写入28.7M。程序思路是这样的,先创建一个记事本文件然后写入180字节,然后关闭文件,然后打开文件,调用f_lseek定位读写指针到距离文件头180字节处,然后写入180字节,然后关闭。以此等等,,,每次打开之后都把读写指针定位到180*i (i= 0 ,1,2,3,4,5,6,7,8,9........)处。测试结果发现不能写数据最大量到达4GB,这是为啥?
回复

使用道具 举报

8

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-4-9
在线时间
32 小时
发表于 2016-5-13 06:44:01 | 显示全部楼层
连续写 不需要关闭 用 f_sync命令
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-5-13 07:52:39 | 显示全部楼层
钟楼脚下 发表于 2016-5-13 06:44
连续写 不需要关闭 用 f_sync命令

main.rar (2.45 KB, 下载次数: 594)
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-5-13 07:53:26 | 显示全部楼层
我用了这个,就是防止掉电数据易失的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-6 22:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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