OpenEdv-开源电子网

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

操作FATFS非常奇怪的问题

[复制链接]

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-1-25
在线时间
16 小时
发表于 2014-3-25 17:14:05 | 显示全部楼层 |阅读模式

  我的程序流程是这样的:
  1.新建一个文件,判断是不是第一次建立,如果是则,新建,将文件头内容写入,关闭文件;不是新建的话,直接关闭
2.再次打开这个文件,开始重复往里面写数据
出现的问题: 如果我新建的文件名为 “20150323.xls”,则SD中会出现两个文件,20150323.xls 和 201503(这个文件没有后缀名),其中20150323.xls中有文件头内容
201503文件将后缀加上后 也有后面重复数据,数据是正确的,但是文件就出现了两个,还有我f_open返回值好像都是对的。程序如下:

while(SD_Initialize())     //?ì??SD?¨
  {
   printf("SD CARD error!\r\n");
  } 
  printf("SD CARD INITIAL OK!\r\n");
  f_mount(&fs,"0:",0);
  sprintf(FileName, "%4d%02d%02d.xls",2015,3,23);     //文件名
  CheckFileExist();    //判断文件是否已经建立,子函数在后面
  res=f_open(&myfp,FileName,FA_OPEN_ALWAYS | FA_WRITE|FA_READ);
   printf("open code %d \r\n",res);//调试时输出0
  for(i=0;i<1000;i++)
  {
  f_lseek(&myfp,myfp.fsize);
  f_printf(&myfp,"%4d-%02d-%02d\t%4d\t%4d\r\n",i,3,21,i,i+1);
  f_sync(&myfp);
  if(i%50==0)printf("write successful %d times\r\n",i);
     delay_ms(1);
  
  }
   f_close(&myfp);
while(1)
  {
   LED=!LED;
   delay_ms(500);
  }

///以上主函数
 


 //子函数,判断文件是否第一次建立,如果没有建立则建立,如果建立则关闭文件返回。

void CheckFileExist(void)
 {
 
 
  res=f_open(&myfp,FileName,FA_CREATE_NEW|FA_WRITE);
  if(res == FR_OK) //file is created first time ,write the title information
  {
   printf("file new create\r\n");
  // f_printf(&myfp,"%4d?ê%2d??%2d????????????\r\n",2015,3,22);
   f_printf(&myfp,"HT DATA  ON %4d-%02d-%02d\r\n",2015,3,22);
   f_sync(&myfp);
   f_lseek(&myfp,myfp.fsize);
  // f_printf(&myfp,"?±??\t????\t????\r\n");
   f_printf(&myfp,"time\thuminity\temperature\r\n");
   f_close(&myfp);
 
  }
  else if(res == FR_EXIST)
  {
   f_close(&myfp);
   printf("file exist!\r\n");

  }
  else
  {
   printf("the result is %d\r\n",res);
   f_close(&myfp);
  }
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-25 20:52:56 | 显示全部楼层
回复【楼主位】shouzhou:
---------------------------------
看你加了很多的printf观察结果,你应该看printf结果,分析下问题.
最好是有仿真器看下.
另外,没看到你新建20150323的文件,这个不应该出现才对.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-1-25
在线时间
16 小时
 楼主| 发表于 2014-3-26 09:04:28 | 显示全部楼层
printf输出结果是新建文件,打开文件都很正常,后来又试了几次发现多出来的那个文件是四个字符,比如建立文件是“345678.xls”,会生出3456这个文件,文件关闭后再打开写入时,也没有报错,但是就是把内容写入到那个3456文件里面了,第一个文件不增加东西了!
回复 支持 反对

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-1-25
在线时间
16 小时
 楼主| 发表于 2014-3-26 09:05:46 | 显示全部楼层
移植的是0.10a,不知道是不是新版的问题。。。,变回0.09a再试试吧!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 04:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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