Ich arbeite mit einigen Bibliotheken, die APIs für die Interaktion mit bestimmten Hardware-Chips bereitstellen (wodurch diese Treiber hergestellt werden?). Bei verschiedenen benutzerdefinierten Boards oder Shields wird der Chip jedoch unterschiedlichen Pins zugeordnet, sodass die Bibliothek für jeden Fall geändert werden muss. Das Ändern der Bibliothek funktioniert mit dem Arduino IDE Library Manager nicht gut.
Gibt es bevorzugte / empfohlene Muster zum Offenlegen dieser Konfiguration, damit die Bibliothek selbst nicht jedes Mal geändert werden muss?
Antworten:
Die Methode, die ich verwende, besteht darin, die Pins als Parameter für den Konstruktor bereitzustellen. Diese PIN-Nummern werden in Variablen gespeichert, um sie später in der
.begin()
Funktion und anderswo zu verwenden.Die meiste Zeit verwende ich Initialisierungslisten, um die Dinge einfach zu halten. Zum Beispiel:
quelle
Ich würde eine der beiden folgenden Möglichkeiten nutzen:
Verwenden Sie (Klassen-) Variablen und legen Sie sie im Konstruktor fest.
Vorteile:
Verwenden Sie eine separate Methode (z. B. Init).
Vorteile:
Bemerkungen
Für Pin-Einstellungen werden meistens statische Schaltkreise verwendet, daher ist der erste Ansatz wahrscheinlich besser.
Bei den Einstellungen ist meistens die zweite Methode besser.
Wenn viele Pins beteiligt sind (nicht wahrscheinlich), verwenden Sie eine Struktur oder eine separate Pin-Einstellungsklasse.
Makros
Was ich nicht empfehlen würde, sind Makros. Wenn Benutzer den Quellcode selbst ändern müssen und neue Versionen installiert werden, müssen sie die Änderungen entweder zusammenführen oder erneut wiederholen. Die Vorteile sind etwas weniger (Maschinen-) Code, wahrscheinlich etwas schneller und etwas weniger Speicherbedarf, aber alle drei Aspekte sind minimal.
quelle
abhängig von Ihrem Ansatz.
1) Wenn Sie nur die Binär- + Header-Dateien bereitstellen, müssen Sie die Pins-Variablen festlegen.
2) Wenn Sie den Quellcode angeben und erwarten, dass der Benutzer den Quellcode neu kompiliert, verwenden Sie Makros.
quelle
Für den Fall, dass Sie das C ++ - Konstruktor-Zeug vermeiden würden, das bei Arduino häufig ein Overkill ist, können Sie
#define
's (objektähnliche Makros) verwenden.Wie so:
Der Präprozessor wird nahtlos durch
PIN_ONE
die Nummer 1 undPIN_TWO
2 ersetzt, vorausgesetzt, diese Definitionen befinden sich in der Bibliotheksheaderdatei.h
. Dies wird im Vergleich zu den anderen möglichen Lösungen höchstwahrscheinlich die geringste Menge an Ressourcen erfordern.quelle