Дубликат библиотеки Arduino SD
Мне нужно иметь две независимые библиотеки arduino sd, чтобы я мог модифицировать одну и сохранить другую нетронутой. Я изо всех сил пытаюсь это сделать. Кто-нибудь знает, возможно ли это вообще? Каким должен быть путь, чтобы сделать это правильно?
Я много чего перепробовал, но всегда оказывался в ситуации, когда не знал, какой код работает, а какой нет. Последней попыткой я продублировал все файлы и переименовал все функции на "2". но не смог заставить это работать
@Espada86, 👍-2
Обсуждение2 ответа
Если вы хотите использовать две версии библиотеки, создайте для второй версии копию библиотеки.
- В папку
libraries
* скопируйте папку библиотеки с другим именем папки (например,SD_modified
) - переименуйте основной включаемый файл в то же новое имя (
SD_modified.h
) - изменить в файле
library.properties
значение ключаincludes
(includes=SD_modified.h
) - В скетче используйте директиву
#include
с новым именем (`#include <SD_modified.h>
*Папка libraries
находится в папке скетчбука. Вы можете найти папку с альбомом для скетчей в настройках Arduino IDE.
Это то, что я пробовал, но, поскольку у них одинаковые пространства имен и классы, я не могу работать над одним и тем же скетчем. Я пытался опубликовать и переименовать все, и здесь я полностью теряюсь. Теперь я рассматриваю возможность использования библиотеки arduino sd и sdfat.h от greiman. Как вы думаете, я могу использовать их на одном скетче Arduino?, @Espada86
@ Espada86 Означает ли это, что вы пытаетесь использовать обе библиотеки одновременно в одном скетче?, @chrisl
да, моя цель состоит в том, чтобы две независимые SD-библиотеки работали над одним и тем же скетчем, @Espada86
@Espada86, невозможно работать с двумя SD-картами с SD-библиотекой. Используйте библиотеку SdFat напрямую (SD обертывает ее), @Juraj
и как мне использовать две sd карты с sdfat? достаточно только смены кспина или для этого есть специальные варианты?, @Espada86
Вы когда-нибудь пробовали платформу IO? он имеет функцию, позволяющую изменять все вхождения класса, включая определение в проекте. У него очень крутая кривая обучения, но как только вы подниметесь по нему, изменение имен классов и определение всех его членов станет каракулем., @Tomas
Я думаю, я могу попробовать это, если это автоматизировано. Можете ли вы рассказать мне больше об этой функции? Вы использовали его?, @Espada86
@ Espada86, может быть, сначала попробуйте ответ Арслана (может быть, это сработает), @Juraj
Это было, вероятно, первое, что я попробовал давным-давно, и это не работает для меня, потому что оно использует ту же библиотеку, которую вы просто переименовываете в том месте, где вы ее вызываете. Мне нужны две независимые библиотеки, чтобы я мог модифицировать одну., @Espada86
@ Espada86, используйте только модифицированную библиотеку, но добавьте конструктор или параметр начала для двух разных вариантов поведения., @Juraj
Я попытался добавить SdClass2, вызываемый SD2, но не смог заставить его работать. Можете ли вы показать мне простой пример, пожалуйста., @Espada86
@ Espada86, почему SdClass2? вы не хотите переименовывать его. это должен быть SDClass SD2;, @Juraj
Если вы хотите использовать две SD-карты, вместо копирования всей библиотеки просто создайте еще один экземпляр класса, например
SDClass SD2;
Теперь вы можете вызывать SD2.begin(CS_PIN_2) или любую другую функцию библиотеки sd.
Это не сработает, потому что вы используете ту же библиотеку, просто меняя имя, в котором вы ее вызываете. Мне нужны две независимые библиотеки, @Espada86
Зачем вам _нужны_ две независимые библиотеки? Знаете ли вы, что переменные обоих объектов SDClass
уже независимы?, @the busybee
@ Espada86 Зачем тебе две библиотеки? Потому что вы хотите использовать две SD-карты?, @Arslan
@the-busybee требование состоит в том, чтобы иметь две независимые библиотеки, потому что я хочу изменить одну, а другую оставить без изменений, но иметь возможность вызывать любую из них в одном и том же скетче., @Espada86
@ Espada86 Espada86 Можете ли вы подсказать, что вы хотите изменить в библиотеке?, @Arslan
@ Espada86, используйте одну модифицированную библиотеку. измените его таким образом, чтобы его можно было использовать и без изменений, @Juraj
- Редактирование определенной позиции в файле, хранящемся на SD-карте
- Arduino SD подсчитывает файлы и открывает их последним, как это сделать?
- «Ошибка выделения SSD1306» при #include SD.h
- Есть ли способ снять ограничение имени файла 8.3 в библиотеке SD.h?
- Как **получить** атрибуты для файлов SD?
- Произвольный доступ к SD-карте с помощью SD.h или другой библиотеки (ESP32)
- SD - карта создает "лишний" файл?
- Arduino не записывает полное предложение NMEA в файл SD-карты
Какова предыстория вашего проекта? Вы хотите использовать обе библиотеки в одном скетче? Если да, то почему? Какие требования у вас есть? Пожалуйста [отредактируйте] свой вопрос и добавьте эту информацию, не используйте комментарии., @the busybee
Вам нужно использовать их оба в одном и том же проекте?, @Tomas
Если нет, то просто создайте папку библиотеки и скопируйте ее в проект, где вы ее редактируете. Затем включите ее как
#include "Sd.h"
, а не#include "Sd.h"
, @TomasДа, мне нужно использовать их оба в одном проекте., @Espada86
Если ваша цель состоит в том, чтобы использовать 2 устройства чтения SD-карт (псевдо) одновременно в проекте, это может помочь: https://forum.arduino.cc/t/two-sd-cards-on-the-same-project/1012605, @6v6gt
это не сработает, мне нужны две независимые библиотеки SD на одном скетче, @Espada86
Вам срочно нужно добавить свою цель в вопрос, [отредактировав] его. Не позволяйте нам и будущим зрителям улавливать все подробности, как хлебные крошки, из ваших комментариев. -- Вы хотите, чтобы две разные библиотеки обращались к одной и той же SD-карте или к двум разным SD-картам? -- Вы проектируете библиотеки из исходников или используете готовые библиотеки?, @the busybee
@the-busybee Цитата из сообщения «Мне нужно иметь две независимые библиотеки arduino sd, чтобы я мог модифицировать одну и сохранить другую нетронутой». Цитата из заголовка «Дубликат библиотеки Arduino SD», @Espada86
Что ж, я сдаюсь. Удачи!, @the busybee