ESP32 и создание экземпляра SD
- Войдите на сайт для отправки комментариев
Ср, 16/03/2022 - 00:43
на mega2560 использовался код:
#include <SD.h>
SDClass * mySD = NULL; // ссылка на объект сд карты
void setup() {
mySD = new SDClass;
if (mySD->begin(5)) delete mySD;
}
void loop() {
}
на ESP32 выдаёт ошибку: error: 'SDClass' does not name a type
я понимаю что используется для компиляции другая библиотека, но вот как изменить код, чтобы заработало не хватает знаний. Используется создание объекта во время выполнения для возможности смены SD карты, создавать новый объект было проще всего. Если сможете чтото посоветовать, буду искренне благодарен.
я понимаю что используется для компиляции другая библиотека, но вот как изменить код, чтобы заработало не хватает знаний
В файле SD.h, который компилируется с esp32 есть объявление:
namespace fs { class SDFS : public FS { protected: uint8_t _pdrv; public: SDFS(FSImplPtr impl); bool begin(uint8_t ssPin=SS, SPIClass &spi=SPI, uint32_t frequency=4000000, const char * mountpoint="/sd", uint8_t max_files=5, bool format_if_empty=false); void end(); sdcard_type_t cardType(); uint64_t cardSize(); uint64_t totalBytes(); uint64_t usedBytes(); }; } extern fs::SDFS SD; using namespace fs; typedef fs::File SDFile; typedef fs::SDFS SDFileSystemClass; #define SDFileSystem SD #endif /* _SD_H_ */а вот как это применить как раз и не знаю, просто поменять SDClass на SDFS не работает, чтото я делаю не так.
просто поменять SDClass на SDFS не работает, чтото я делаю не так.
в чем выражается "не работает"?
Выразился не корректно, не компилируется:
#include <SD.h> SDFS * mySD = NULL; // ссылка на объект сд карты void setup() { mySD = new SDFS; if (mySD->begin(5)) delete mySD; } void loop() { }Ошибки :
Arduino: 1.8.10 (Windows 10), Плата:"ESP32C3 Dev Module, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 160MHz (WiFi), QIO, 80MHz, 4MB (32Mb), 921600, None" C:\Users\User\Documents\Arduino\sketch_mar16a\sketch_mar16a.ino: In function 'void setup()': sketch_mar16a:5:14: error: no matching function for call to 'fs::SDFS::SDFS()' mySD = new SDFS; ^~~~ In file included from C:\Users\User\Documents\Arduino\sketch_mar16a\sketch_mar16a.ino:1: C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SD\src/SD.h:30:5: note: candidate: 'fs::SDFS::SDFS(fs::FSImplPtr)' SDFS(FSImplPtr impl); ^~~~ C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SD\src/SD.h:30:5: note: candidate expects 1 argument, 0 provided C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SD\src/SD.h:24:7: note: candidate: 'fs::SDFS::SDFS(const fs::SDFS&)' class SDFS : public FS ^~~~ C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SD\src/SD.h:24:7: note: candidate expects 1 argument, 0 provided C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SD\src/SD.h:24:7: note: candidate: 'fs::SDFS::SDFS(fs::SDFS&&)' C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SD\src/SD.h:24:7: note: candidate expects 1 argument, 0 provided Несколько библиотек найдено для "FS.h" Используется: C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\FS Несколько библиотек найдено для "SPI.h" Используется: C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SPI Несколько библиотек найдено для "SD.h" Используется: C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.0-rc1\libraries\SD Не используется: B:\Arduino\libraries\SD exit status 1 no matching function for call to 'fs::SDFS::SDFS()'посмотрите внимательнее на листинг класса в сообщении #2. Там нет конструктора SDFS() без параметров, о чем вам компилятор и пишет.
Вот как раз суть проблемы, на что и не хватает знаний. Как переделать код под ESP32. Нужно передать конструктору какие то параметры, если конечно класс SDFS это именно тот класс.
В модуле SD.h объявление такое:
соответственно что передавать конструктору не понятно.
Оказывается, надо читать весь код библиотеки а не только один заголовок. Кто бы мог подумать.
В модуле SD.h объявление такое:
соответственно что передавать конструктору не понятно.
это не при делах.
Смотрите на обьявление конструктора:
он требует передачи параметра FSImplPtr. Судя по имени, это должен быть указатель на класс, описывающий файловую систему на СД-карте. Посмотрите, какие в библиотеке описаны файлосистемы и выберите нужную
rkit прав, надо серьезно разбираться в библиотеке, с наскоку не получится
Какие конкретно в этой библиотеке - не смотрел, лениво.
Могут быть: SPIFFS / FAT / FATFS