Ich bevorzuge eine klare Struktur in meinen Firmwareprojekten. Dazu gibt es über die reine Funktion hinaus wichtige Elemente. 1.: Dateistruktur : - Funktionen sind in einer *.h für defines, - einer *.h für Funktionsdeklaration und Doku - und einer *.c Datei für Funktionsimplementierung aufgeteilt. 2.: logische Struktur : - Funktionen sind atomar - Funktionen sind wiederverwertbar - Funktionen sind aufeinander aufbauend - Funktionen sind dokumentiert 3.: Schnittstellen sind klar dokumentiert (z.B. durch Kommentare in der*.h Datei für die Funktionsdeklaration). 4.: Das Funktionsprinzip vermeider Sonderbehandlung von "Ausnahmefällen". 5.: Höhere Funktionen bauen auf Grundfunktionen auf (Modulares System). 6.: Funktionen sind in folgenden Projekten wiederverwendbar (Effizienz über mehrere Projekte statt Effizienz nur in einem Projekt) 7.: das Datenmodell passt auf die technischen Gegebenheiten 8.: das programmiertechnische Fundamant wird in der Datenmodellierung berücksichtigt Bei der Erstellung der Firmware werden Qualitätsprüfungen ständig durchgeführt. Fehlerfreier Code ist ungetesteter Code Dazu gehören insbesonders die folgenden Designrichlinien: - Die erste Idee der Umsetzung ist mit Sicherheit nicht die beste Idee. - Qualitätsloops bei der Spezifizierung und Implementierung einplanen. - Externer Test Stimulus ist mit den normalen Funktionsaufrufen möglich. - Debugging systemintern (Selbsttest) und systemextern (Teststand/Frontend) einplanen. - Benchmark Funktionalität (systemintern + systemextern) ist normaler Bestandteil der Funktionen. - exceptions (Fehlerbehandlung) und errno Rückgabewerte sinnvoll nutzen. - Startparameter auf Konsistenz prüfen. - RTOS erleichtert das Leben und bringt richtig angewendet Struktur für Daten und Code. - Funktionen tauschen Daten und Kommandos über klar definierte Schnittstellen (z.B. Queues) aus. - einen sauberen Übergang von -> Hardwarefunktionalität (z.B. IRQ, DMA) -> zu Echtzeitfunktion (z.B. Taskpriorität, garantierte Reaktionszeit) und -> zu Datenverarbeitung finden Es gibt auch wichtige "not to dos" beim Konzept und der Programmierung ! - NIEMALS Annahmen machen welcher Codeteil wann, wie oft und wie schnell abgearbeitet wird. - NIEMALS globale Variablen für die Programmablaufsteuerung verwenden. - NIEMALS per copy&paste Code aus älteren Projekten ungeprüft übernehmen. |
Linux Mint ist mein derzeit bevorzugtes Linux System. Um das System schnell aufzusetzten habe ich mir ein Skript vorbereitet das das automatisiert. |
Linux Mint 21/22 Quick Setup |
Arduino und ESP32 sind ja recht populär, darum hier eine Kostprobe. |
additional Arduino Board Support |
Arduino Lilygo TWatch2020-V1 Basics |
Hier stelle ich mal ein paar ältere Programmierbeispiele aus meiner Feder vor. Nichts weltbewegendes, aber mir hilft es, die Grundlagen immer präsent zu haben. Auf die Überschrift klicken zum Download. |
STM32F103CB bluepill ili9341 |
Eine kleine Demonstration vom Bluepill Board mit einem ili9341 TFT an PB12-PB15 mit SPI2-CS/CLK/MISO/MOSI und PA9-DC und PA10-RST |
STM32F4-Disco BSP STM32F4-Disco BSP Binary |
Zum Einstieg ist das B(oard)S(upport)P(ackage) immer eine gute Wahl. |
STM32F429i-Disco BSP STM32F429i-Disco BSP Binary |
Zum Einstieg ist das B(oard)S(upport)P(ackage) immer eine gute Wahl. |
STM32F746G-Disco STM32F746G-Disco Binary |
Zum Einstieg ist das B(oard)S(upport)P(ackage) immer eine gute Wahl. |
STM32F769i-Disco BSP STM32F769i-Disco BSP Binary |
Zum Einstieg ist das B(oard)S(upport)P(ackage) immer eine gute Wahl. |
ein C++ Template wie aus dem Lehrbuch für Klassen. Mit Eclipse CDT bzw Wascana getestet (benötigt make) |
Template_C++.zip |
Und hier ein AVR Studio 4 / WinAVR Projekt in C für den Atmel ATtiny13a. Hauptsächlich als Experimentier- projekt für das Steckbrett gedacht. Das Programm bringt die LEDs an PortB-0:2 abwechselnd zum Leuchten, eine LED an PortB-4 blinkt Timer gesteuert und ein Interrupt durch eine High Flanke auf PortB-3 ändert das Blinkverhalten von PortB-4. |
ATtiny13A_Beispiel.zip |
Und hier das "Roulette" AVR Studio 4 / WinAVR Projekt in C für den Atmel ATtiny13a. Ist nur eine kleine Fun Applikation für das Roulette PCB Projekt. Pseudo zufällig wird eine der 4 LEDs an geschaltet wenn man die Taste drückt. Nach einer kurzen Dauer wird die LED wieder gelöscht und das Spiel kann von vorne los gehen. |
Roulette Zufallsgenerator |
Und hier das "Tiny_Timer" AVR Studio 4 / WinAVR Projekt in C für den Atmel ATtiny13a. Soll als Übung für den Timer0 in den Atmel 8-Bittern dienen. |
ATtiny13a Timer |
Und hier das "Tiny_Timer+ADC" AVR Studio 4 / WinAVR Projekt in C für den Atmel ATtiny13a. Soll als Übung für den ADC in den Atmel 8-Bittern dienen. Die Schaltung für das Programm sollte wie auf dem Bild beschrieben aufgebaut sein. |
ATtiny13a Timer+ADC |