Anbieter zum Thema
Die Bedeutung von Schnittstellen
Eine elegantere Lösung bietet das Einführen einer Schnittstelle. Diese regelt vertraglich, welche Optionen und Funktionen ein gewisses Modul bereitstellt. (Bild 6 in der Bildergalerie)
Um dieses Modul zu verwenden, muss die Applikation eine Instanz davon generieren. Eine Instanz ist ein Objekt, das alles einkapselt was für die Benutzung des Moduls notwendig ist: eine Referenz zu seiner Kontroll-Struktur (ähnlich wie eine “this” oder “self” Referenz die in anderen Programmiersprachen vorhanden ist), eine Konfigurationsstruktur und ein Satz an Funktionsaufrufen (APIs), die die Schnittstelle unterstützt um die Dienste des Modus in Anspruch zu nehmen.
Die Konfigurationsstruktur enthält normalerweise die gemeinsamen Parameter, die für diesen Typ von Modul relevant sind (Quellcode 1 in der Bildergalerie als Beispiel für ein I2C Modul: eine I2C-Kanalnummer, die maximale Übertragungsgeschwindigkeit, die Bus-Adresse, und die Adressentiefe).
Für Module, die sich direkt mit der Hardware unterhalten, gibt es den zusätzlichen Bedarf, eine Funktion zu definieren, die aufgerufen wird, wenn die Hardware der Applikation ein Ereignis mitteilen muss (eine Callback-Funktion), zum Beispiel wenn sich eine Änderungen in dem Zustand der Peripherie ergibt oder bei Verfügbarkeit von neuen Daten.
Diese Funktion wird im Zusammenhang mit einen Interrupt-Ereignis aufgerufen und ist in der Lage ein Kontext bereitzustellen um den Auslöser dieses Ereignisses zu identifizieren. (Quellcode 2 in der Bildergalerie)
Die Definition der APIs innerhalb der Schnittstelle ermöglicht ein einfaches Austauschen des Moduls, indem man es an eine unterschiedliche Instanz / Implementierung zuweist. Somit ist es möglich mit dem Modul mittels einer einheitlichen Schnittstelle zu interagieren. (Quellcode 3 und 4 in der Bildergalerie)
Jegliche Änderung benötigt nur das Austauschen der Referenz zu der aktuellen Instanz. Damit kann man leicht neue zukünftige Implementierungen unterstützen, durch die Abstrahierungsschicht, die die API Definition ermöglicht. (Quellcode 5 in der Bildergalerie)
Jede Spezialfunktion, die einzigartig für ein bestimmtes Modul ist, außerhalb der gemeinsamen Funktionen für den Modultyp, kann in einen Erweiterungsfeld innerhalb der Struktur untergebracht, und dieser kann in dem Kontext von dem Modul verwendet werden während seine Initialisierung. (Quellcode 6 und 7 in der Bildergalerie)
Alle diese Ansätze können dazu beitragen, eine robuste, modulare, gut getestete Grundlage für eine eingebettete Software zu entwickeln. (Bild 7 in der Bildergalerie)
Die Applikation besteht aber aus mehreren Teilen und beinhaltet eine Software für die hardwarenahe Konfiguration des Boards, wahrscheinlich ein Echtzeit-Betriebssystem (RTOS), komplexe Software-Stacks für USB oder Ethernet-Funktionalität oder vielleicht einige funktionsbezogene Module (Framework), die die Basisblöcke kombinieren um der Applikation komplexere Funktionen bereitzustellen.
(ID:44296110)