Дубликат библиотеки Arduino SD

Мне нужно иметь две независимые библиотеки arduino sd, чтобы я мог модифицировать одну и сохранить другую нетронутой. Я изо всех сил пытаюсь это сделать. Кто-нибудь знает, возможно ли это вообще? Каким должен быть путь, чтобы сделать это правильно?

Я много чего перепробовал, но всегда оказывался в ситуации, когда не знал, какой код работает, а какой нет. Последней попыткой я продублировал все файлы и переименовал все функции на "2". но не смог заставить это работать

, 👍-2

Обсуждение

Какова предыстория вашего проекта? Вы хотите использовать обе библиотеки в одном скетче? Если да, то почему? Какие требования у вас есть? Пожалуйста [отредактируйте] свой вопрос и добавьте эту информацию, не используйте комментарии., @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


2 ответа


0

Если вы хотите использовать две версии библиотеки, создайте для второй версии копию библиотеки.

  1. В папку libraries* скопируйте папку библиотеки с другим именем папки (например, SD_modified)
  2. переименуйте основной включаемый файл в то же новое имя (SD_modified.h)
  3. изменить в файле library.properties значение ключа includes (includes=SD_modified.h)
  4. В скетче используйте директиву #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


1

Если вы хотите использовать две SD-карты, вместо копирования всей библиотеки просто создайте еще один экземпляр класса, например

SDClass SD2;

Теперь вы можете вызывать SD2.begin(CS_PIN_2) или любую другую функцию библиотеки sd.

,

Это не сработает, потому что вы используете ту же библиотеку, просто меняя имя, в котором вы ее вызываете. Мне нужны две независимые библиотеки, @Espada86

Зачем вам _нужны_ две независимые библиотеки? Знаете ли вы, что переменные обоих объектов SDClass уже независимы?, @the busybee

@ Espada86 Зачем тебе две библиотеки? Потому что вы хотите использовать две SD-карты?, @Arslan

@the-busybee требование состоит в том, чтобы иметь две независимые библиотеки, потому что я хочу изменить одну, а другую оставить без изменений, но иметь возможность вызывать любую из них в одном и том же скетче., @Espada86

@ Espada86 Espada86 Можете ли вы подсказать, что вы хотите изменить в библиотеке?, @Arslan

@ Espada86, используйте одну модифицированную библиотеку. измените его таким образом, чтобы его можно было использовать и без изменений, @Juraj