Я пытаюсь прочитать файл на SD-карте, используя FATFS в RTOS.Карта успешно монтируется в отдельный исходный файл в ОСРВ, но когда я пытаюсь использовать операции FatFs в своем собственном исходном файле, я получаю результат FR_NOT_ENABLED.
Это несколько странный сценарий, требующий некоторого контекстаЯ студент-техник по электронике, взявший на себя довольно сложную задачу переделать MCU и его собственную ОСРВ.В RTOS уже есть исходный файл, который монтирует SD-карту (назовем ее sd.cpp), и другой файл (назовем его Sensors.cpp), который записывает в него файлы данных датчика.Я удостоверился, что включил все соответствующие заголовочные файлы в мой исходный файл (который, для ясности, давайте назовем myfile.cpp).
Я попробовал несколько вещей: первым была реализация операции f_mountпрямо в myfile.cpp.Это вызвало результат FR_DISK_ERR, который, как я понимаю, связан с тем фактом, что он уже смонтирован в другом файле, так что это явно за кадром.Оттуда я попытался закомментировать все экземпляры SD-карты в Sensors.cpp, но это открывает реальную «банку червей», которую я предпочел бы сохранить, пока не исчерпаны другие параметры ...
IПолагаю, что все сводится к тому, чтобы выяснить, как передать рабочую область SD из sd.cpp в myfile.cpp.Я пытался изучить Sensors.cpp, чтобы понять, как это делается там, но, к сожалению, его содержание далеко за пределами моего понимания, как простой студент-электронщик.
Это STM32L476RG, использующий цепочку инструментов GNU-ARM и инструменты сборки OpenOCD.
Код - это все довольно стандартные вещи FATFS.Функция монтирования SD в SD.cpp:
FATFS fs;
bool isMounted = false;
FRESULT fsMountSd(){
FRESULT res = f_mount(&fs, "0:", 1);
if( res == FR_OK) isMounted = true;
if (isMounted = true){
CLI_printMessage("SD Card mounted");
}
return res;
}
Возвращает FR_OK и печатает «SD Card mount» в CLI.
Тогда есть мои собственные операции FatFs в myfile.cpp:
FIL config; //file object of from the SD card
FRESULT fr;
FILINFO fno;
//check for config.txt file
fr = f_stat("0:config.txt", &fno); //check for config.txt file
if (fr == FR_OK){
CLI_printMessage("File found!");
}
Это работает, когда я запускаю операцию f_stat в модуле sd.cpp, подтверждая, что это проблема отсутствия поискаобъект файловой системы в myfile.cpp.
Я также пытался использовать указатели в функции монтирования sd.cpp:
FATFS *fs;
bool isMounted = false;
FRESULT fsMountSd(){
FRESULT res = f_mount(fs, "0:", 1);
if( res == FR_OK) isMounted = true;
if (isMounted = true){
CLI_printMessage("SD Card mounted");
}
return res;
}
Когда я попробовал это, я также добавил строку "extern FATFS * fs;"в файл sd.hК сожалению, это также не удалось.
Стоит добавить, что я прочитал всю документацию на высокоинформативной странице поддержки Fatfs .
Короче говоря: я надеюсь получить FR_OK из этого f_stat(проверяя файл) в myfile.cpp, чтобы я мог двигаться дальше.Я надеюсь, что это было достаточно подробно, так как моя последняя попытка задать этот вопрос здесь была очень быстро (и понятно), за что проголосовали!