Intelligente, einfache und verständliche Funktionalität
Moderne Elektroniken und eingebettete Systeme arbeiten fast ausschließlich mit einem Mikroprozessor – wir erstellen die Firmware!
Software sind unsere Gedanken, Hardware unser Gehirn – nur eine intelligente Software haucht einem System Leben ein. Getreu diesem Motto legen wir bei der Implementierung großen Wert auf intelligente, einfache und verständliche Funktionalität. Diese Grundsätze wenden bei unserer Firmwareentwicklung an!
Anforderungsanalyse
Die Softwareentwicklung läuft Hand-in-Hand mit der Hardwareentwicklung!
Die Auswahl von geeigneten Komponenten und Mikrocontrollern auf der Hardwareseite hat direkten Einfluss auf die Firmwareentwicklung. Eine Abgrenzung der beiden Kerngebiete ist bei der Entwicklung eines Gesamtgerätes fast nicht möglich. Im Gegenteil, es bringt den Vorteil mit sich, das Gesamtkonzept sehr robust, schnell und mit bewährten Methoden zu realisieren, da schon mit der Wahl der Hardware die spätere Firmwareerstellung maßgeblich positiv beeinflusst werden kann. Je nach Anforderung wird entschieden, welche Komponenten als fertige Bibliotheken von Drittanbietern einbezogen bzw. ob die komplette Firmware von Grund auf neu erstellt wird.
Firmware-Entwicklung
Die Firmwareentwicklung wird unter Berücksichtigung von gängigen Richtlinien erstellt (z.B. MISRA C), um einen hohen Qualitätsstandard zu erreichen und automatisierte Code Reviews zu ermöglichen!
Unsere priorisierte Programmiersprache für embedded Anwendungen ist Ansi C, gemischt mit Assembler für Spezialszenarien wie z.B. Bootloaderentwicklung, Startup-Code, Betriebssystem Scheduler oder zeitkritischen Code.
Je nach Anforderung an das Produkt wird individuell entschieden, ob die Firmware direkt erstellt (bare metal), ein Betriebssystem als Grundlage (RTOS) oder für komplexe Systeme ein embedded Linux eingesetzt wird.
Wir nutzen moderne Toolchains (Compiler, Linker, Makefiles, IDEs, Debugger), um einen einwandfreien Quellcode zu erzeugen, führen Stackanalysen bei Betriebsystemanwendungen durch, analysieren das Linker- und Mapfile zur Codeoptimierung.
Kurzum: Wir nutzen alle gängigen Werkzeuge, um die Firmware bugfrei, modular, robust, wartbar und langlebig zu gestalten!
Natürlich kommentieren wir den Quellcode (in Deutsch oder Englisch), um diesen für Sie oder Dritte nachvollziehbar zu gestalten. Auch wird standardmäßig der Quellcode mit einem Versionierungssystem gekoppelt (SVN oder GIT) und zusätzlich immer als Back-up gespeichert.
Algorithmenentwicklung
Sensoren generieren Daten und Aktoren sollen auf Ereignisse reagieren – klingt einfach, ist es aber nicht!
Dazwischen findet in eingebetteten Systemen die Magie statt – komplexe Algorithmen bereiten die Daten auf, werten diese aus, vergleichen diese mit Sollvorgaben und passen dynamisch die Vergleichswerte und Bedingungen an, um am Ende eine oder mehrere Aktionen zu triggern. Dies kann das Ansteuern eines Motors sein oder das Absetzen einer Meldung über einen Kommunikationsbus oder eines drahtlosen Funksystems sein.
Bei der Algorithmenentwicklung greifen die Felder Mess- und Regelungstechnik, Signalverarbeitung und Steuerungsdesign eng ineinander.
Wir sind darauf spezialisiert, schnelle und robuste Algorithmen zu entwickeln, welche auch mit außergewöhnlichen Eingangsdaten zurechtkommen. Wir haben erste Erfahrungen mit KI- und Deep-Learning-Systemen.
Treiberentwicklung
Jede Peripherie-Hardware bzw. jeder Kommunikationsbus, der von einem Mikrocontroller angesprochen werden soll, wird über eine Schnittstelle an den Mikrocontroller angebunden und spricht ein ganz spezielles Protokoll.
Auch das ein- und auslesen der Daten ist immer auf die Hardware bzw. den Bus individuell anzupassen. Wir erstellen die Treiber bzw. greifen auf ein Set von bereits erstellten Treibern zurück, damit unsere Firmware mit den an dem Mikrocontroller angeschlossene Peripherien arbeiten kann. Die ist je nach System (bare metal, RTOS oder embedded Linux) unterschiedlich komplex.