Я работаю с некоторыми библиотеками, которые предоставляют API для взаимодействия с конкретными аппаратными чипами (что делает эти драйверы?). Однако на разных пользовательских платах или щитах микросхема будет отображаться на разных выводах, поэтому библиотеку необходимо модифицировать для каждого случая. Необходимость изменения библиотеки плохо работает с Arduino IDE Library Manager.
Существуют ли предпочтительные / рекомендуемые шаблоны для предоставления этой конфигурации, чтобы не нужно было каждый раз изменять саму библиотеку?
Ответы:
Метод, который я использую, заключается в предоставлении выводов в качестве параметров для конструктора. Эти номера выводов хранятся в переменных для последующего использования в
.begin()
функции и в других местах.Большую часть времени я использую списки инициализации для простоты. Например:
источник
Я бы использовал одну из следующих двух возможностей:
Используйте (класс) переменные и установите их в конструкторе.
Преимущества:
Используйте отдельный (например, Init) метод.
Преимущества:
замечания
Для настройки выводов используются в основном статические цепи, поэтому первый подход, вероятно, лучше.
Для настроек в основном лучше второй способ.
Если задействовано много выводов (маловероятно), используйте структуру или отдельный класс настроек выводов.
макрос
То, что я бы не советовал, это макросы. Когда пользователям необходимо изменить исходный код самостоятельно и установить новые версии, они должны либо объединить, либо повторить изменения. Преимущества - немного меньший (машинный) код, возможно, немного быстрее и немного меньше памяти, но все три аспекта минимальны.
источник
в зависимости от вашего подхода.
1) если вы просто предоставите бинарные файлы + заголовочные файлы, вам придется сделать переменные pins.
2) если вы предоставляете исходный код и ожидаете, что пользователь перекомпилирует исходный код, используйте макросы.
источник
Если вы не хотите использовать конструктор C ++, который в Arduino является излишним, вы можете использовать
#define
s (объектно-подобные макросы).Вот так:
Препроцессор легко заменит
PIN_ONE
номер 1 иPIN_TWO
2, предполагая, что эти определения находятся в заголовочном.h
файле библиотеки . Это, скорее всего, займет меньше всего ресурсов по сравнению с другими возможными решениями.источник