У меня есть код, написанный в Atmel Studio для чтения / записи данных с SD-карты. Я использую FatFs здесь. Моя проблема в том, что код не компилируется, когда я использую некоторые функции (f_chdir, f_getcwd …) в FatFs. Некоторые функции работают нормально (f_puts, f_open, f_mount, f_mkdir …). Все эти функции находятся в одном заголовочном файле (ff.h, ff.c).
Ошибка говорит: «неопределенная ссылка на -function-, ld вернул 1 состояние выхода». Когда я иду к ошибке, она показывает конец кода, в то время как предполагается, чтобы показать, где ошибка.
Я не могу понять проблему с моим кодом. Любая помощь приветствуется.
Просто столкнулся с этим, используя SD-карту для проекта, использующего SAM4S Xplained Pro (Atmel 7, ASF 3.20).
Убедитесь, что у вас есть все проекты 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. Все переменные определены там в первую очередь (и защищены #ifndef FFCONF, а не CONF_FATFS), то есть именно здесь это имеет значение ..
Зайдите в conf_fatfs.h и измените _USE_STRFUNC на 1 или 2 и вуаля.
Также обратите внимание, что в местах, где вы его используете, вы должны #include ff.h, которому предшествует либо ffconf.h, либо conf_access.h
ASF — настоящая змеиная яма, если вы не знаете, что ищете.
Наслаждаться.
Matt
Открой 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 включены в вашу сборку, можно настроить, чтобы вам не пришлось терять ценное пространство ПЗУ (а также несколько байтов ОЗУ) для функций, которые вы не используете.
Для версий библиотеки FatFS до 0.8a, _FS_RPATH
поддерживает только значения 0
а также 1
; f_getcwd
недоступно в этих версиях.
Кроме того, в версиях до 0.8 необходимо, чтобы код C ++ явно включал свои заголовки как заголовки C, чтобы избежать искажения имени:
extern "C" {
#include "ff.h"}
Начиная с версии 0.8, он делает это внутренне. Вы можете найти новые версии Вот если вы все еще работаете со старым — оставленный вами комментарий приводит меня к мысли, что это может быть так.
Проверить, если _FS_MINIMZE в ffconf.h является 0 иметь все доступные функции.
В моей версии, которую я скачал с elm-chan, по умолчанию было установлено значение 3, что привело к ошибке компилятора: неопределенная ссылка.