野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11006|回复: 7

FATFS移植问题 请大神帮忙

[复制链接]
发表于 2018-10-17 22:24:36 | 显示全部楼层 |阅读模式
int main(void)
{
       
        FRESULT fres;
       
        LED1_GPIO_Config();
  LED2_GPIO_Config();
  LED3_GPIO_Config();
  Usart1_config();  

        printf("这是一个FatFs文件系统移植实验\n");
    fres= f_mount(&fsObject,"1:",1);

        if(fres!=FR_OK)
  {
           if(fres==FR_NO_FILESYSTEM)  //
             {
                    printf("Flash没有文件系统,即将进行格式化...错误代码:%d\n",fres);
                    fres=f_mkfs("1:",0,0);//格式化
               
                     if(fres==0)
                      {
                       printf("Flash格式化成功,重新开始挂载>>>>>>\n");
                         
                              f_mount(NULL,"1:",1);
                        fres= f_mount(&fsObject,"1:",1);
                               if(fres==0)
                                {  
                            printf("重新挂载成功\n");
                 LED_GREEN;                               
                                }       
                                       
                       }
       
        }
                        else
                                 {
                              printf("SPI_FLASH挂载失败,错误代码:%d\n",fres);
                              LED_RAD;
                           }
   }
       
                else
                {
                        printf("SPI_FLASH挂载成功\n");
                        LED_GREEN;       
                }
                /*挂载成功后 下面开始写入*/
                fres=f_open(&fp,"1:中文文件名.txt",FA_CREATE_ALWAYS|FA_WRITE);               
                if(fres==FR_OK)
                {
                        printf("打开文件成功>>>>>>>准备写入\n");
                        fres=f_write(&fp,wdate,sizeof(wdate),&bw);
                        if(fres==FR_OK)
                        {
                                printf("写入成功>>>>>>>写入字节数为:%d\n写入的内容为:%s\n",bw,wdate);
        fres=f_close(&fp);
                         }
                         else
                         {
                                 printf("文件写入失败,错误代码为:%d\n",fres);
                         }
                }
                else
                {
                        printf("文件打开失败,错误代码为:%d\n",fres);
                }
               
/*  写入成功  下面开始读出数据内容*/               

            //fres=f_open(&fp,"1:中文文件名.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE);
                        fres=f_open(&fp,"1:中文文件名.txt",FA_OPEN_EXISTING|FA_READ|FA_WRITE);

                        if(fres==FR_OK)
                        {  
                                printf("文件打开成功,现在开始读取数据内容\n");       
                                //fres=f_write(&fp,wdate,sizeof(wdate),&bw);
        //f_lseek(&fp,0);                               
                                fres=f_read(&fp,rdate,f_size(&fp),&rw);
                                 
                                if(fres==FR_OK)
                                {
           printf("读取成功>>>读出字节数为:%d\n读出内容为:%s\n",rw,rdate);
                                }
                                else
                                {
                                        printf("文件读取失败,错误代码为:%d",fres);
                                }
                        }
                        else
                        {
                          printf("文件打开失败,错误代码为:%d",fres);
                        }
                        f_close(&fp);
                        f_mount(NULL,"1:",1);
            while(1);
1.上面代码在 写入完毕,关闭文件再用f_open函数打开文件时候 打开文件失败 错误代码4:FR_NO_FILE 文件不存在   但是如果不关闭文件写完直接读,读出的内容是正确的, 关闭文件后文件就不存在了,用模拟优盘看过  确实没有! 但是烧入例程源码就是正确的  求大神帮忙!
2.这个问题没有代码, 就是按照视频步骤移植代码的时候,前面都能复制视频现象,直到格式化FLASH后就不对了,视频中格式化后,再次复位就会挂载成功,我的一直是错误13:没有文件系统,格式化返回值是成功的,但是把读写地址偏移2M,使用后面6M的时候就没问题,求大神帮忙

回复

使用道具 举报

发表于 2018-10-18 00:29:43 | 显示全部楼层
                                printf("写入成功>>>>>>>写入字节数为:%d\n写入的内容为:%s\n",bw,wdate);                                                                 fres=f_close(&fp);
回复 支持 反对

使用道具 举报

发表于 2018-10-18 00:31:40 | 显示全部楼层
这个fres=f_close(&fp);不要写在这个地方, 因为如果文件写入失败  是不会执行这个 函数的;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-18 21:00:04 | 显示全部楼层
_libra 发表于 2018-10-18 00:31
这个fres=f_close(&fp);不要写在这个地方, 因为如果文件写入失败  是不会执行这个 函数的;

但是我确认写入是成功的,因为如果不关闭直接读 是能读出来的,写入成功就会这行这个语句的, 我换了fres=f_close(&fp);的位置也是不行的, 打开文件时提示文件不存在的命令
回复 支持 反对

使用道具 举报

发表于 2018-10-19 10:54:51 | 显示全部楼层
宁古塔 发表于 2018-10-18 21:00
但是我确认写入是成功的,因为如果不关闭直接读 是能读出来的,写入成功就会这行这个语句的, 我换了fres ...

我的错误,应该是打开文件成功后,才需要调用c_close();
如果是上面的代码执行完后,再去写f_open();应该是不行的,应为 最后一行写着  f_mount(NULL,"1:",1);
文件系统被取消挂在了
回复 支持 反对

使用道具 举报

发表于 2018-10-19 10:57:40 | 显示全部楼层
宁古塔 发表于 2018-10-18 21:00
但是我确认写入是成功的,因为如果不关闭直接读 是能读出来的,写入成功就会这行这个语句的, 我换了fres ...

你应该吧问题代码也贴出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-19 22:39:53 | 显示全部楼层
_libra 发表于 2018-10-19 10:57
你应该吧问题代码也贴出来

不好意思,不明白你说的问题代码是什么。编译没有任何错误或者警告!仿真器调试都不知道应该看哪里!大神看看还能拯救下不?
回复 支持 反对

使用道具 举报

发表于 2018-10-19 23:51:02 | 显示全部楼层
宁古塔 发表于 2018-10-19 22:39
不好意思,不明白你说的问题代码是什么。编译没有任何错误或者警告!仿真器调试都不知道应该看哪里!大神 ...

哪一步出错,哪一步功能没实现 ,仔细描述清楚啊;
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 11:35 , Processed in 0.032222 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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