打印
[STM32F1]

FATFS 文件系统

[复制链接]
1364|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
爱不孤单|  楼主 | 2014-7-9 10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在调用fread函数的时候出现了问题, 因为需求问题,需要读取文件内容到nand 中,因为nand是以页的方式读写的,我使用的nand一页大小是2112(2KB +62)Byte;所以要需要用到大小为2048的字符型数组(假设为A[2048]),这个时候问题来了,我在调用fread()函数的时候,一次读取2048个字节到数组A[2048]中,但是发现前面36个字节不是我想要的内容,36个字符内容来源无从考证(此处用了Winhex打开文件做了仔细的对比);
如果A数组大小为1024的话,内容是一致的;
然后就接着修改,增加了一个大小为1024的字符型数组(假设为B[1024]),分两次调用fread()函数,每次读取1024字节到B[1024]数组中,然后在再把B数组中的内容copy到A中,这个时候问题出现了,在第一次调用fread()语句结束后,A[2048]数组中的512~530字节内容被莫名的修改(注意:此处刚刚执行完fread()函数,还没用调用memcpy()函数,而且两个数组都初始化为0的),然后调用memcpy()内容正常,在第二次调用完fread()语句的时候,A[2048]数组中的508~512字节又被莫名的改掉了(注意:此处还是没有调用任何与A[]数组有关的函数);
接着修改, 又增加一个字符型数组,运行到完fread()函数的时候,发现B[1024]数组根本没有任何内容考出;
好郁闷。。。。。不知道是不是哪里设置出现了问题。。
下面就是出问题的代码:

部分代码如下:
uint8_t A[2048]={0};
uint8_t B[1024]={0};//第二次修改增加的
//uint8_t Buf[512]={0};//第三次修改增加的
for(i=0;i<2;i++)
{
f_read(fsrc,B,1024,&br);
memcpy(A+1024*i,B,1024);
memset(B,0,sizeof(B));
}
沙发
_icmcu_study| | 2014-7-9 12:37 | 只看该作者
你读取的文件开始的地方是什么地方,nand文件系统开始的部分,是用来记录文件状态,以及簇大小,个数之类的~

使用特权

评论回复
板凳
爱不孤单|  楼主 | 2014-7-9 15:08 | 只看该作者
_icmcu_study 发表于 2014-7-9 12:37
你读取的文件开始的地方是什么地方,nand文件系统开始的部分,是用来记录文件状态,以及簇大小,个数之类的 ...

我打开的是一张BMP图片,我应经用f_lseek()函数跳过去前面BMP_Head 头部54个字节,后面都是有效地数据,您说的nand 也可以用FATFS来操作?我都是通过FSMC 来操作他的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

21

帖子

1

粉丝