C ++ FatFs неопределенная ссылка на функции

У меня есть код, написанный в Atmel Studio для чтения / записи данных с SD-карты. Я использую FatFs здесь. Моя проблема в том, что код не компилируется, когда я использую некоторые функции (f_chdir, f_getcwd …) в FatFs. Некоторые функции работают нормально (f_puts, f_open, f_mount, f_mkdir …). Все эти функции находятся в одном заголовочном файле (ff.h, ff.c).

Ошибка говорит: «неопределенная ссылка на -function-, ld вернул 1 состояние выхода». Когда я иду к ошибке, она показывает конец кода, в то время как предполагается, чтобы показать, где ошибка.

Я не могу понять проблему с моим кодом. Любая помощь приветствуется.

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

2

Другие решения

Открой 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, он делает это внутренне. Вы можете найти новые версии Вот если вы все еще работаете со старым — оставленный вами комментарий приводит меня к мысли, что это может быть так.

0

Проверить, если _FS_MINIMZE в ffconf.h является 0 иметь все доступные функции.
В моей версии, которую я скачал с elm-chan, по умолчанию было установлено значение 3, что привело к ошибке компилятора: неопределенная ссылка.

0
По вопросам рекламы [email protected]