野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18964|回复: 4

文件系统 添加f_mkdir后编译失败,去掉则可

[复制链接]
发表于 2014-7-28 08:57:07 | 显示全部楼层 |阅读模式
本帖最后由 鱼乐99 于 2014-7-28 09:00 编辑

#include "stm32f10x.h"
#include "bsp_sdio_sdcard.h"
#include "usart1.h"
#include "ff.h"

# ifndef _FF_H

  #include "diskio.h"
# endif


int main (void)
{
  USART1_Configuration();
  NVIC_Configuration();
  disk_initialize(0);

  f_mount(0,&fs);          //挂在到盘区
  res =f_mkdir("newdir");                               // 新建文件夹,名为newdir
  //FRESULT        f_mkdir (const TCHAR*);
  res = f_open(&fnew, "0:newfile.txt", FA_CREATE_ALWAYS | FA_WRITE );

  if ( res == FR_OK )
    {
         res = f_write(&fnew, textFileBuffer, sizeof(textFileBuffer), &bw);
         f_close(&fnew);      
        }
  else if ( res == FR_EXIST )
  {
    printf ("\r\n文件已经存在\n");
  }

  res = f_open(&fnew, "0:newfile.txt", FA_OPEN_EXISTING | FA_READ);         

  br=1;                        ///?
  for (;;)
   {
    for (a=0;a<512;a++)
          {
                   buffer[a]=0;
          }
      res = f_read(&fnew, buffer, sizeof(buffer), &br);

      printf("\r\n %s ", buffer);  
          if (res||br==0)
            {break;}
        }

    f_close(&fnew);                /* Close open files */                                      
                 
    /* Unregister work area prior to discard it */


  f_mount(0, NULL);                         //卸载挂载盘区
               
   while(1);
}

编译后 output显示:
Build target 'Target 1'
compiling main.c...
linking...
..\Output\STM-DEMO.axf: Error: L6218E: Undefined symbol f_mkdir (referred from main.o).
..\Output\STM-DEMO.axf: Not enough information to list image symbols.
..\Output\STM-DEMO.axf: Finished: 1 information, 0 warning and 1 error messages.
Target not created
问题:
添加f_mkdir后编译失败,去掉则可。output显示main中没有定义f_mkdir,但我在头文件已经#include “ff.h”,同样是ff.h中的 f_read和f_write 却可以编译通过。。
请教前辈,多谢!

另外,此main函数中  br=1,有什么作用?因为f_read()中有一行 :*br = 0;        /* Initialize byte counter */,将br初始化为0,为何在f_read前 还给br赋值1?  此处优点不解。。。
回复

使用道具 举报

发表于 2014-7-28 09:12:17 | 显示全部楼层
在文件系统的配置文件中设置开启全功能就可以了,那个文件好像叫f_conf.c还是.h忘记了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 09:30:39 | 显示全部楼层
子车梨祎 发表于 2014-7-28 09:12
在文件系统的配置文件中设置开启全功能就可以了,那个文件好像叫f_conf.c还是.h忘记了

#define        _USE_MKFS                1        /* 0isable or 1:Enable */
//#define        _USE_MKFS                0        /* 0isable or 1:Enable */                         //原文件
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */

我在ff_conf.h 中找到 这个定义, 我把_USE_MKFS 值改成1,编译结果还是一样   。。。。。不解
是不是 找的不对??
回复 支持 反对

使用道具 举报

发表于 2014-7-28 11:59:41 | 显示全部楼层
鱼乐99 发表于 2014-7-28 09:30
#define        _USE_MKFS                1        /* 0isable or 1:Enable */
//#define        _US ...

是这个宏:
  1. #define _FS_MINIMIZE        0        /* 0 to 3 */
  2. /* The _FS_MINIMIZE option defines minimization level to remove some functions.
  3. /
  4. /   0: Full function.
  5. /   1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename
  6. /      are removed.
  7. /   2: f_opendir and f_readdir are removed in addition to 1.
  8. /   3: f_lseek is removed in addition to 2. */
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 12:27:09 | 显示全部楼层
子车梨祎 发表于 2014-7-28 11:59
是这个宏:

非常感谢哥们
正如你所说  谢谢了


另外,此main函数中  br=1,有什么作用?因为f_read()中有一行 :*br = 0;        /* Initialize byte counter */,将br初始化为0,为何在f_read前 还给br赋值1?
这个小问题,不知道你之前可看到过
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 02:00 , Processed in 0.027720 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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