Software

Struktur

Das Herzstück des Projektes ist die Firmware. Sie erweckt den Prototypen zum Leben. In folgendem Abschnitt wird die Softwarestruktur näher erläutert.

Das Konzept dieser Software ist relativ Simpel. Die Hardware wird über Treiber in die Software abgebildet. Diese Treiber werden schichtartig abstrahiert und zusammengeschalten. Dabei entsteht eine Pyramidenform,  wie in unterem UML-Diagramm dargestellt. Konkret stellt dieses UML-Diagramm unsere tatsächliche Softwarearchitektur dar.

Ebenen

Wie anhand obiger Grafik zu sehen ist, gliedert sich unsere Software sich in fünf Ebenen. Diese werden im Folgenden beschrieben.

System Driver Layer

Die unterste und zugleich wichtigste Ebene der Firmware stellt die System Driver Layer dar. Diese Umfasst die vom Hersteller des Microcontrollers „STMicroelectronics“ zur Verfügung gestellten Hilfsfunktionen und Definitionen. Hierbei handelt es sich konkret um die CMSIS, HAL und LL.

 Die sogenannte CMSIS(Cortex Microcontroller Software Interface Standard) definiert in erster Linie Registeradressen des konkreten Microcontrollers und vordefinierte Werte zur Konfiguration eben dieser Register. Sie stellt die Basis für die HAL und LL dar.

Die sogenannte HAL(Hardware Abstraction Layerwiederum stellt Hilfsfunktionen und Hilfsfunktionen zur Verfügung. Diese dienen der einfacheren Erstellung von Treibern für diverse microcontrollerspezifische Peripherals. In anderen Worten: Hilfsfunktionen, um Software zur Nutzung gewisser Geräte zu erstellen.

Ähnlich der HAL, ist die Aufgabe der LL die Bereitstellung von Hilfsfunktionen und Hilfsstrukturen. Genau wie bei der HAL, dienen dieser der einfacheren Erstellung von Treibern. Der technische Unterschied zwischen HAL und LL ist, dass die LL mit Augenmerk auf Ressourcenverbrauch entwickelt wurde. Das heißt, die Verwendung dieser, soll mit Hinsicht auf Speicher und idealerweise auch CPU-Zeit, effizientere Treiber ermöglichen. 

An dieser Stelle sei erwähnt, dass wir uns entschieden haben, alle Treiber nach Möglichkeit in HAL zu halten und direkte Registerzugriffe via CMSIS zu vermeiden. Dies dient einer Vereinheitlichung des Codes und Vermeidung einer weiteren, potenziellen Fehlerquelle.

Weitere Informationen: 

CMSIS

Vergleich HAL/LL

User Driver Layer

Diese ebene baut auf den Hilfsfunktionen aus der HAL, LL und CMSIS. Sie stellt an unser Projekt angepasste Gerätetreiber zur Verfügung. Ihr Zweck ist es die HAL, LL und CMSIS weiter zu abstrahieren, sodass nur noch wenige Funktionen, zur vollständigen Konfiguration des betreffenden Geräts, aufgerufen werden müssen. Zudem stellt diese Ebene Funktionen zum einfachen auslesen oder ausgeben von Daten zur Verfügung.

  • ADC: Konvertierung analoger Spannungswerte in digitale Zahlen
  • DMA: Treiber zur Nutzung des DMAs für nicht-blockierende Datenübertragung
  • Force Feedback: Konkreter Treiber für den Vibrationsmotor
  • Key: Konkreter Treiber zur Nutzung der Tastknöpfe am Board
  • LED: Konkreter Treiber zur Nutzung der LEDs am Board. Implementiert auch die geforderte Blinkfunktion
  • Watchdog: Unterbricht die Ausführung, sollte das Programm in einer Endlosschleife hängen bleiben.
  • SysClock: Zur Konfiguration der Takt- PLL. Implementiert eine Untertaktung(z.B. für Sleepmode), Übertaktung auf Normaltakt und eine Kalibrierung  der Takt- PLL(um USB korrekt nutzen zu können).
  •  SPI: Treiber für das SPI-Peripheral. Wird zur Kommunikation mit externen Geräten genutzt.
  • UART: Treiber für das UART/USART-Peripheral. Kommunikation mit externen Geräten.

Protocol Layer

Die Protocol implementiert die Treiber für externe Geräte und deren Protokolle. Konkret heißt das, dass diese Treiber, mithilfe der User Driver Layer und den Protokollen externer Geräte, eben diese Geräte steuert.

  • USB: Verwendung zur Ausgabe von Debug- Daten via USB.
  • BLE: Übertragung von Systemdaten und Steuerung des Systems(Aus Zeitgründen nicht Implementiert)
  • GPS: Standortermittlung
  • PLB: Kommunikation mit dem Sender

Application Subsystem Layer

Diese Ebene stellt gewisse Subsysteme zur Verfügung. Dies ist jetzt nicht im Sinne eines Subsystem im Betriebssystem(z.B. Linux) zu verstehen. Viel mehr schalten diese Systeme mehrere Treiber zusammen und bilden kleine, eigenständige, funktionale Einheiten.

  • LOG Modul: Dient zur Ausgabe von Debugdaten via USB.
  • Location module: Ermittelt und bereitet die Standortdaten auf
  • Emergency call: Handhabt den Sender und setzt den Notruf ab.
  • User Interface: Handhabung der Nutzereingaben

Main Application Layer

Diese Ebene stellt das eigentliche Programm dar. Es verschaltet die einzelnen Subsysteme zu einer, funktionalen Einheit. Es gewährleistet, dass alle Subsysteme miteinander Kommunizieren und ihrer Arbeit nachgehen.