OpenEdv-开源电子网

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

关于SD卡Fatfs文件系统的连续在一个文件写入数据的问题

[复制链接]

16

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2020-3-5
在线时间
36 小时
发表于 2021-1-2 21:52:34 | 显示全部楼层 |阅读模式
10金钱
u8 key=0;
u16 BufferSize = 0;       
FIL        MyFile;                        // 文件对象
u8  FATFS_write(void)        //文件创建和写入测试
{
        u8 i = 0;


       
        UINT         MyFile_Num;                //        数据长度
        BYTE         MyFile_WriteBuffer[1024];
        BYTE         MyFile_ReadBuffer[1024];        //要读出的数据
        sprintf((char*)MyFile_WriteBuffer,"角度  x: %f,y: %f,z: %f地磁  x: %d,y: %d,z: %d",angle_x,angle_y,angle_z,Geomagnetism_x,Geomagnetism_y,Geomagnetism_z);


       
        printf("-------------FatFs 文件创建和写入测试---------------\r\n");
        if(!key)
        {
        MyFile_Res = f_open(&MyFile,"0:FatFs Test.txt",FA_CREATE_ALWAYS | FA_WRITE);        //打开文件,若不存在则创建该文件

        if(MyFile_Res == FR_OK)
        {
                printf("文件打开/创建成功,准备写入数据...\r\n");
               
               
                MyFile_Res = f_write(&MyFile,MyFile_WriteBuffer,sizeof(MyFile_WriteBuffer),&MyFile_Num);        //向文件写入数据
                        f_close(&MyFile);          //关闭文件

                if (MyFile_Res == FR_OK)       
                {
                        printf("写入成功,写入内容为:\r\n");
                        printf("%s\r\n",MyFile_WriteBuffer);
                }
                else
                {
                        printf("文件写入失败,请检查SD卡或重新格式化!\r\n");
                        f_close(&MyFile);          //关闭文件       
                        return ERROR;                       
                }
                               
        }

        else
        {
                printf("无法打开/创建文件,请检查SD卡或重新格式化!\r\n");
                f_close(&MyFile);          //关闭文件       
                return ERROR;               
        }
        key=1;
        BufferSize = sizeof(MyFile_WriteBuffer)/sizeof(BYTE);
}       
        else
                {
        MyFile_Res = f_open(&MyFile,"0:FatFs Test.txt", FA_CREATE_ALWAYS | FA_WRITE);        //打开文件,若不存在则创建该文件
         f_lseek(&MyFile,BufferSize);
  MyFile_Res = f_write(&MyFile,MyFile_WriteBuffer,sizeof(MyFile_WriteBuffer),&MyFile_Num);        //向文件写入数据
                          f_close(&MyFile);          //关闭文件       
                                        if (MyFile_Res == FR_OK)       
                {
                        printf("写入成功,写入内容为:\r\n");
                        printf("%s\r\n",MyFile_WriteBuffer);
                }
                else
                {
                        printf("文件写入失败,请检查SD卡或重新格式化!\r\n");
                        f_close(&MyFile);          //关闭文件       
                        return ERROR;                       
                }

                }
BufferSize = sizeof(MyFile_WriteBuffer)/sizeof(BYTE);
        printf("-------------FatFs 文件读取测试---------------\r\n");       
       

        return SUCCESS;
}
我每次是写进文件六个数据,之后利用f_lseek函数在文件末尾再次写入6个数据,但是在电脑上上看只有第一次数据是正常的其他都是乱码


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2021-3-6
在线时间
27 小时
发表于 2021-3-27 22:50:33 | 显示全部楼层
应该还是f_lseek这个函数的问题,我也是搞不懂这个连续写的问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2021-3-28 01:46:21 | 显示全部楼层
简化代码,写个简单版本的再测试下。
回复

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2021-3-6
在线时间
27 小时
发表于 2021-3-30 11:04:25 | 显示全部楼层
把FA_CREATE_ALWAYS 换成FA_OPEN_ALWAYS
回复

使用道具 举报

1

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2020-9-8
在线时间
27 小时
发表于 2021-4-26 16:06:47 | 显示全部楼层
大佬,这个问题解决了吗,我刚开始学,要是可以的话我想学习一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 00:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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