OpenEdv-开源电子网

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

关于文件系统读写问题

[复制链接]

3

主题

14

帖子

1

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2012-1-26
在线时间
0 小时
发表于 2012-2-26 16:26:05 | 显示全部楼层 |阅读模式

请教大家一个问题,就是我移植了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<sizeof(FatBuffer);i++)  FatBuffer=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给文件系统,则一切正常……

 

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

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-26 19:27:20 | 显示全部楼层
不是这么用的吧.
unsigned char FatBuffer1[4096];

res = f_read(&dst, FatBuffer1, 4096,&br); 
这样肯定就读出4096字节了.
干嘛建个二位数组呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
发表于 2012-2-26 23:01:58 | 显示全部楼层
  跟着学习……
回复 支持 反对

使用道具 举报

3

主题

14

帖子

1

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2012-1-26
在线时间
0 小时
 楼主| 发表于 2012-2-27 22:52:12 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
不是这么用的吧.
unsigned char FatBuffer1[4096];
res = f_read(&dst, FatBuffer1, 4096,&br); 
这样肯定就读出4096字节了.
干嘛建个二位数组呢?
---------------------------------
原子哥,就是说读多大的字节就建多大的一维数组?有没有别的方法?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-27 23:49:04 | 显示全部楼层
回复【4楼】linziying:
---------------------------------
你想怎么读?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

14

帖子

1

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2012-1-26
在线时间
0 小时
 楼主| 发表于 2012-2-28 14:00:53 | 显示全部楼层
回复【5楼】正点原子:
回复【4楼】linziying:
---------------------------------
你想怎么读?
---------------------------------
例如:一TXT文档,有一篇很长的文章,一万字,怎么读出来?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-28 14:03:17 | 显示全部楼层
慢慢读,一次读1000字节,你读10次就可以了.
一次读500字节,你读20次就可以了
一次读2个字节,你读5000次就可以了
读其他的值,你自己算.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

14

帖子

1

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2012-1-26
在线时间
0 小时
 楼主| 发表于 2012-2-28 14:03:37 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,论坛有人发了一个文件系统读写的,刚看了一下,也是用for(;;)读写的,用一个u8 buffer[]就行,好奇怪,我再研究一下。
回复 支持 反对

使用道具 举报

3

主题

14

帖子

1

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2012-1-26
在线时间
0 小时
 楼主| 发表于 2012-2-28 14:05:22 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
就是我想分成几部分读出来,读的时候用同一个buffer来存储,每读一次就更新一次,但是不行,所以才发了这个帖的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-28 17:40:36 | 显示全部楼层
不行说明你的有问题.你那建的数组也比较蛋疼.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 04:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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