我有一个用Atmel Studio编写的代码,用于从SD卡读取/写入数据。我在这里使用的是FatFs。我的问题是,当我使用一些函数(f_chdir、f_getcwd...)时,代码不能编译。在FatFs中。有些函数可以正常工作(f_puts、f_open、f_mount、f_mkdir...)。所有这些函数都位于相同的头文件(ff.h,ff.c)中。
该错误显示“未定义对-function-的引用,ld返回1个退出状态”。当我转到错误时,它显示了代码的结尾,而它应该显示错误的位置。
我不能理解我的代码的问题。任何帮助都是非常感谢的。
发布于 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是一个真正的蛇坑。
好好享受吧。
发布于 2019-07-17 19:54:17
默认情况下,在ASF向导中禁用内存控制访问接口。要启用内存控制访问,请执行以下步骤。
启用ASF SD sd_mmc_mem.h内存访问
这将添加sd_mmc_mem.h /.c文件
发布于 2015-02-23 17:47:40
在您喜欢的编辑器中打开ffconf.h并将_FS_RPATH设置为2。来自ffconf.h
#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仅支持值0和1;f_getcwd在这些版本中不可用。
此外,在0.8之前的版本中,C++代码有必要显式地将其标头包含为C标头,以避免名称损坏:
extern "C" {
#include "ff.h"
}从0.8版开始,它会在内部实现这一点。如果您仍在使用旧版本,可以找到新版本的here --您留下的注释使我相信情况可能是这样的。
https://stackoverflow.com/questions/28670756
复制相似问题