Software

Übersicht der durchgeführten Softwareprojekte
- Details sind aufgrund von Geheimhaltungsverpflichtungen deutlich reduziert.

C/C++ Firmware für Steuergeräte

Vom Start der Entwicklung im Jahr 2005 begleitete ich die Produktlinie mit dem Anforderungsmanagement und der Erstellung der Firmware. Ein großer Teil der entwickelten Software ist auch heute (2024) noch im Einsatz auf Schiffen und in Kraftwerken in aller Welt.

Initialisierung

Prozessor-Initialisierung, Clock-Routing, Speicherinitialisierung, Bootloader

Betriebssystem

Da die MCU aus der Automotive-Welt kommt, wurde ein entsprechendes Betriebssystem verwendet. Hier habe ich die statische Konfiguration übernommen.
In 2008 wurde mein eigenes FabOS für AVR und AVR32 geschaffen, welches sehr ähnliche Features bietet

Treiberentwicklung

Die Ansteuerung von Peripherie für die Busse CAN, SPI und I2C, der angehängten Peripherie, sowie integrierter ADC, mutet zunächst einfach und "straightforward" an. Wenn jedoch die Funktionalitäten, wie Queueing, DMA und Triggering verwendet werden, ist ein tiefes Verständnis der MCU Architektur notwendig. Durch die nebenläufige Ausführung der Wandlung und Kommunikation kann viel CPU Zeit gespart werden.

Laufzeitoptimierung und Analyse

Mittels Lauterbach Debug/Trace und anderer kombinierter Techniken können leistungshungrige Funktionen gefunden und optimiert werden.
Diese Techniken wurden auch zum Benchmarking von SPS Code verwendet, indem Marker als C-Funktionen in den SPS-Code integriert wurden.

CoDeSys Laufzeitsystem-Integration und Middleware

Die Integration eines SPS-Laufzeitsystems in einen Automotive-Prozessor ist ungewöhnlich, aber essenziell, um Echtzeitfunktionen in Einspritzung und Regelung zu nutzen. Gleichzeitig bleibt die Flexibilität erhalten, Applikationen bei Bedarf – sogar vor Ort – anzupassen.

Ich habe Funktionen zur Abstraktion der Parametrierung und Echtzeit-IO integriert. Zudem wurden Bus-Protokolle abstrahiert, um die Parametrierung zu erleichtern und Fehlerzustände effizient im Alarmhandling zu signalisieren.

Testen und Debuggen

Mit dem Framework CxxTest wurden grundsätzliche Funktionen getestet.
Der Lauterbach Debugger ist zusätzlich ein unverzichtbares Hilfsmittel zur Entwicklung von Embedded-Code. Setzen von Breakpoints ermöglicht es, den Ablauf zu verstehen. Mit der Tracing Funktion kann man die Performance sowohl von Code als auch der aufgebauten Struktur messen. Durch die Branch-Coverage lässt sich die Testabdeckung nachweisen.
In besonders hartnäckigen Fällen muss die Software-Diagnose mit einer Hardware-Instrumentierung verbunden werden.

Refactoring und Reintegration

Von Zeit zu Zeit lässt es sich nicht vermeiden, dass Code ausgetauscht werden muss, oder eine Portierung auf eine neue Plattform ansteht.
Der Ansatz "Macht es Freude, oder kann es weg" hilft hier weiter.
Ggf. ist ein Hinterfragen der Anforderungen an die Funktion angebracht.

Python - Projekte

CoDeSys

Ein großer Teil der ersten Generation der Einspritzungssteuerung wurde von mir erstellt.
Hierzu war ein gutes Verständnis der zu steuernden Maschine erforderlich.

Implementierte Elemente

  • PID Regelung für Drehzahl, Hochdruck, Temperatur
  • Balancing von Zylindern
  • Selbstlernende Algorithmen
  • Ablaufsteuerung und Diagnosen
  • Alarm- und Fehlerbehandlung
  • Strukturierte Behandlung von erwartbaren IO- und logischen Fehlern

Legacy Code

Bestehende Strukturen werden behalten, wo sinnvoll möglich. Wenn jedoch die Struktur auseinanderfällt, wird der Sinn hinterfragt und neu implementiert.

Release Management

Aufbau einer Release-Struktur mit versions-sensitiver Verwaltung aller verwendeten Bibliotheken
Reproduzierbare Builds auch mit Legacy-Tools

Contact