首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ FatFs未定义对函数的引用

C++ FatFs未定义对函数的引用
EN

Stack Overflow用户
提问于 2015-02-23 17:43:18
回答 6查看 5K关注 0票数 1

我有一个用Atmel Studio编写的代码,用于从SD卡读取/写入数据。我在这里使用的是FatFs。我的问题是,当我使用一些函数(f_chdir、f_getcwd...)时,代码不能编译。在FatFs中。有些函数可以正常工作(f_puts、f_open、f_mount、f_mkdir...)。所有这些函数都位于相同的头文件(ff.h,ff.c)中。

该错误显示“未定义对-function-的引用,ld返回1个退出状态”。当我转到错误时,它显示了代码的结尾,而它应该显示错误的位置。

我不能理解我的代码的问题。任何帮助都是非常感谢的。

EN

回答 6

Stack Overflow用户

发布于 2017-06-03 05:24:53

刚刚在一个使用SAM4S Xplained (Atmel7,ASF3.20)的项目中使用SD卡遇到了这个问题。

确保你有所有的asf项目(fatfs,sd_mmc,内存访问控制,然后是其他的基础知识,比如pmc,gpio,也许还有更多)。由于某种原因,我的asf没有包含sd_mmc_mem.c和sd_mmc_mem.h,所以我不得不自己包含它们。还要记住在主循环的顶部执行sd_mmc_init()。至于配置...

如果仔细观察ffconf.h,它做的第一件事就是包含conf_fatfs.h (等一下!)与ffconf.h文件逐行完全相同。

进入conf_fatfs.h并将_USE_STRFUNC更改为1或2 et voila。

还请注意,在使用它的地方,您必须#包含前面带有ffconf.h或conf_access.h的ff.h

如果你不知道你要找的是什么,ASF是一个真正的蛇坑。

好好享受吧。

票数 3
EN

Stack Overflow用户

发布于 2019-07-17 19:54:17

默认情况下,在ASF向导中禁用内存控制访问接口。要启用内存控制访问,请执行以下步骤。

  1. 打开ASF向导(Alt +W)。
  2. 启用内存控制访问,如下所示。

启用ASF SD sd_mmc_mem.h内存访问

  1. 最后,单击“Apply”选项进行更改。

这将添加sd_mmc_mem.h /.c文件

票数 1
EN

Stack Overflow用户

发布于 2015-02-23 17:47:40

在您喜欢的编辑器中打开ffconf.h并将_FS_RPATH设置为2。来自ffconf.h

代码语言:javascript
复制
#define _FS_RPATH       0
/* This option configures relative path feature.
/
/   0: Disable relative path feature and remove related functions.
/   1: Enable relative path feature. f_chdir() and f_chdrive() are available.
/   2: f_getcwd() function is available in addition to 1.
/
/  Note that directory items read via f_readdir() are affected by this option. */

您的构建中包含了fatfs库的哪些功能是可配置的,这样您就不会因为不使用的功能而损失宝贵的ROM空间(以及几个字节的RAM)。

对于0.8a之前的FatFS库版本,_FS_RPATH仅支持值01f_getcwd在这些版本中不可用。

此外,在0.8之前的版本中,C++代码有必要显式地将其标头包含为C标头,以避免名称损坏:

代码语言:javascript
复制
extern "C" {
#include "ff.h"
}

从0.8版开始,它会在内部实现这一点。如果您仍在使用旧版本,可以找到新版本的here --您留下的注释使我相信情况可能是这样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28670756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档