STM32
直播中

夏焕丽

8年用户 147经验值
私信 关注
[问答]

请问文件系统读写超过一个buffer的话该怎么读取?

请教大家一个问题,就是我移植了FATFS9.0的文件系统,读取512byte是没有问题的,可是当读取大于512byte的字节就有问题,具体如下:
(有部分代码省略)
第一种代码,buffer[512]复用,串口无输出:
//FAT缓冲区
unsigned char FatBuffer[512]={0};

res = f_mount(0, &fs );
res = f_open ( &dst , "0:TEST.txt" , FA_OPEN_EXIStiNG | FA_READ ) ;

for (;;)  
{
          //清除缓存
          for(i=0;i=0;
  
          res = f_read(&dst, FatBuffer, sizeof(FatBuffer), &br);
          if (res || br == 0) break;   // error or eof
  
          printf("%s",FatBuffer);//串口输出文件内容,但是测试结果串口无输出,让其返回res也无返回
   }

第二种代码,建立buffer[8][512],即可读取8个512字节的数据,并显示出来,代码如下:
//FAT缓冲区
unsigned char FatBuffer1[8][512]={0};

res = f_mount(0, &fs );
res = f_open ( &dst , "0:TEST.txt" , FA_OPEN_EXISTING | FA_READ ) ;

for (i=0;i<8;i++)  
{   
        res = f_read(&dst, FatBuffer1, sizeof(FatBuffer1), &br);
        if (res || br == 0) break;                 // error or eof
  
        printf("%s",FatBuffer1);              //串口输出文件内容
}


不知道有没有人遇到这样的问题,想知道大家对文件系统的操作,读取的字节超过一个buffer的话,是怎么读取的?要建那么多个buffer吗?

还有,小弟还遇到另一个类似的问题:程序刚开始会读取SD卡信息,存在buffer1,串口打印出来,然后再执行文件系统操作,此时如果文件系统也用buffer1的话,那么串口则没有输出,程序会卡在initial success……;如果再新建一个buffer2给文件系统,则一切正常……

想了很久没想明白,上来求助~~

回帖(9)

谭齐慧

2019-8-30 06:57:52
不是这么用的吧.
unsigned char FatBuffer1[4096];
res = f_read(&dst, FatBuffer1, 4096,&br); 
这样肯定就读出4096字节了.
干嘛建个二位数组呢?
举报

黄鹏

2019-8-30 07:06:06
  跟着学习……
举报

巩潇然

2019-8-30 07:13:28
原子哥,就是说读多大的字节就建多大的一维数组?有没有别的方法?
举报

周雯葭

2019-8-30 07:32:12
你想怎么读?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分