Estoy trabajando con algunas bibliotecas que proporcionan API para interactuar con chips de hardware específicos (¿qué hacen estos controladores?). Sin embargo, diferentes tableros o escudos personalizados tendrán el chip asignado a diferentes pines, lo que significa que la biblioteca debe modificarse para cada caso. La necesidad de modificar la biblioteca no funciona bien con Arduino IDE Library Manager.
¿Existen patrones preferidos / recomendados para exponer esta configuración para que la biblioteca en sí no necesite ser modificada cada vez?
Respuestas:
El método que uso es proporcionar los pines como parámetros para el constructor. Esos números de pin se almacenan en variables para usar más adelante en la
.begin()
función y en otros lugares.La mayoría de las veces uso listas de inicialización para simplificar las cosas. Por ejemplo:
fuente
Usaría cualquiera de las dos posibilidades siguientes:
Use variables (clase) y configúrelas dentro del constructor.
Ventajas:
Utilice un método separado (por ejemplo, Init).
Ventajas:
Observaciones
Para la configuración de pines, se utilizan principalmente circuitos estáticos, por lo que el primer enfoque es probablemente mejor.
Para la configuración, principalmente el segundo método es mejor.
Si hay muchos pines involucrados (no es probable), use una estructura o una clase de configuración de pines separada.
Macros
Lo que no recomendaría es macros. Cuando los usuarios necesitan cambiar el código fuente ellos mismos y se instalan nuevas versiones, tienen que fusionar o rehacer los cambios nuevamente. Las ventajas son un poco menos de código (máquina), probablemente un poco más rápido y un poco menos de uso de memoria, pero los tres aspectos son mínimos.
fuente
Dependiendo de su enfoque.
1) si solo proporciona los archivos binarios + encabezado, tendrá que hacer que los pines sean variables.
2) si proporciona el código fuente y espera que el usuario vuelva a compilar el código fuente, use macros.
fuente
En caso de que evite las cosas del constructor de C ++ que comúnmente son una exageración en Arduino, podría usar
#define
's (macros similares a objetos).Al igual que:
El preprocesador se reemplazará sin problemas
PIN_ONE
con el número 1 yPIN_TWO
con 2, suponiendo que esas definiciones estén en el.h
archivo de encabezado de la biblioteca . Esto probablemente requerirá la menor cantidad de recursos en comparación con las otras posibles soluciones.fuente