OpenEdv-开源电子网

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

求助!FATFS文件读写问题!

[复制链接]

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
发表于 2014-3-5 21:54:07 | 显示全部楼层 |阅读模式

本人最近研究原子哥的例程,改编了个FATFS文件读写程序,有点问题,代码中被注释的地方,若取消注释,则程序就不知卡在何处,求指导?!

 

是和 ffconfig.h 最多允许打开文件配置有关?还是文件系统允许重入有关?还是个人程序操作有误?

 

/*变量定义*/
u16 ctemp=0;
/*函数声明*/
void StartUp(void);

int main(void)
{
 StartUp();
 OINT_COLOR=RED;
 LCD_ShowString(10,10,"FATFS Test :");

 while(1)
 {
  LCD_ShowNum(10,40,ctemp,1,12);
  LED1=!LED1;
  ctemp++;
  delay_ms(500);
  if(ctemp==10) ctemp=0;
 }

}
void StartUp(void)
{
 FATFS fs;
 //FIL * fsd;
 FIL * nf;
 u8 res;
 //char read_buf[16];
 char write_buf[]={"It is a file create test!"};
 SystemInit();
 delay_init(72);
 NVIC_Configuration();
 LED_Init();
 KEY_Init();
 uart_init(9600);
 LCD_Init();

 SPI_Flash_Init(); //SPI FLASH初始化
 f_mount(0, &fs); //初始化必须mount

// res=f_open(fsd,"test.txt",FA_READ);
//  if(res)//打开文件失败
// {
//  f_close(fsd);
//  LCD_ShowString(10,10,"Open File Error!");
//  while(1)
//  {
//   LED0=0;
//  }
// }
// f_gets(read_buf,sizeof(read_buf),fsd);
// printf(read_buf);
// f_close(fsd);

 res=f_open(nf,"nm.txt",FA_CREATE_ALWAYS|FA_WRITE);
  if(res)//创建文件失败
 {
  f_close(nf);
  LCD_ShowString(10,10,"Create File Error!");
  while(1)
  {
   LED0=0;
  }
 }

 f_puts(write_buf,nf);


 f_close(nf);
}

 

 

 

把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

227

帖子

3

精华

高级会员

Rank: 4

积分
956
金钱
956
注册时间
2014-3-5
在线时间
35 小时
 楼主| 发表于 2014-3-6 16:54:09 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
明白了!经改后成了。

原因一是:当年结构体没学好,结构体指针和成员有点搞混;二是:对FATFS还没有详细研究就急于求成,照着原子哥的例程画虎成猫。

现分享一下:读取SD根目录下test。txt文件中内容,通过串口打印出来(本想用LCD_ShowString显示,好像变量类型有点不对,暂时没管);
再新建一文件,将write_buf[]中内容写入。

紧献给比我飞的还低的菜鸟,高手见笑哈

/*变量定义*/

/*函数声明*/
void StartUp(void);

int main(void)
{
StartUp();
POINT_COLOR=RED;
LCD_ShowString(10,10,"FATFS Test:");
LCD_ShowString(10,40,"OK!");
while(1)
{
LED1=!LED1;
delay_ms(500);
}

}
void StartUp(void)
{
FATFS fs;
FIL fsd;
FIL nf;
u8 res;
char read_buf[16];
char write_buf[]={"It is a file create test!"};
SystemInit();
delay_init(72);
NVIC_Configuration();
LED_Init();
//KEY_Init();
uart_init(9600);
LCD_Init();

SPI_Flash_Init(); //SPI FLASH初始化
f_mount(0, &fs); //初始化必须mount


res=f_open(&fsd,"test.txt",FA_READ); 
  if(res)//打开文件失败
{
f_close(&fsd);
LCD_ShowString(10,10,"Open File Error!");
while(1)
{
LED0=0;
}
}
f_gets(read_buf,sizeof(read_buf),&fsd);
printf(read_buf);
f_close(&fsd);

res=f_open(&nf,"nm.txt",FA_CREATE_ALWAYS|FA_WRITE);
  if(res)//创建文件失败
{
f_close(&nf);
LCD_ShowString(10,10,"Create File Error!");
while(1)
{
LED0=0;
}
}

f_puts(write_buf,&nf);
f_close(&nf);
}
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。 应用确实不容易,水平是在不断的实践中完善和发展的。
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-5 23:02:50 | 显示全部楼层
回复【楼主位】爱博不专:
---------------------------------
fsd内存都没分配,这不找死么...
一个指针就是4个字节而已啊,你看看FIL结构体,有多大。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 06:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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