野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17478|回复: 2

FatFs读取文件失败

[复制链接]
发表于 2020-7-17 16:41:01 | 显示全部楼层 |阅读模式
我用的火哥的例程,移植到自己的板子上没有问题,能读取。现在想读一个39472字节的bin文件,一直报错误读取文件失败(9)The file/directory object is invalid */(文件/目录对象无效),程序如下图。希望大伙给点建议。读取文件我放在Function()函数里,作为其中一个功能,希望按下屏幕,读取数据。

FATFS fs;             /* FatFs文件系统对象 */
FIL fnew;             /* 文件对象 */
FRESULT res_sd;                /* 文件操作结果 */
UINT fnum;                   /* 文件成功读写数量 */
BYTE ReadBuffer[1024]={0};        /* 读缓冲区 */


show_string(0,0,"即将进行文件读取测试... ");

res_sd = f_open(&fnew, "0:app.bin", FA_OPEN_EXISTING | FA_READ);  
if(res_sd == FR_OK)
{
  show_string(0,0,"》打开文件成功。 ");
  BinSize = fnew.fsize;
  SD_Readnum = BinSize/1024;
  if(BinSize%1024 != 1024)
  {
   SD_Readnum++;
  }
  sprintf((char *)SD_s,"》文件读取成功,读到字节数据:%d",BinSize);
  show_string(0,0,SD_s);

  for(i=0;i<4;i++)
  {
   Instrction_APP[4+i] = BinSize >> (8*(3-i));
  }

  for(j=0;j < SD_Readnum;j++)//更新需要17秒
  {  
   res_sd = f_read(&fnew, ReadBuffer, sizeof(ReadBuffer), &fnum);
   for(k=0;k<(fnum/8);k++)
   {
    for(l=0;l<8;l++)
    {
     APP_Inf.sendbuffer[l] = ReadBuffer[l+k*8];
    }
   }
  }

  if(res_sd==FR_OK)
  {
   sprintf((char *)SD_s,"》读取得的文件数据为:%s",ReadBuffer);
   show_string(0,64,SD_s);
  }
  else
  {
   sprintf((char *)SD_s,"!!文件读取失败:(%d)",res_sd);
   show_string(0,64,SD_s);
  }  
}
else
{
  show_string(0,0,"!!打开文件失败。 ");
}
/* 不再读写,关闭文件 */
f_close(&fnew);

微信图片_20200717163408.png
微信图片_20200717163706.png
微信图片_20200717163710.png
微信图片_20200717163808.png
微信图片_20200717163953.png
微信图片_20200717164017.png
回复

使用道具 举报

 楼主| 发表于 2020-7-17 16:44:33 | 显示全部楼层
补充:前面读取文件大小BinSize是正确的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-20 16:33:35 | 显示全部楼层
已解决,把程序从头按照测试程序,一点点的添加,能完成我需要的功能了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 16:29 , Processed in 0.034201 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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