Umbau in ein Multifile Projekt in der Arduino IDE

Die Struktur der Software in nur einer Datei gefällt mir nicht gut. Es ist sehr lang und damit sehr unübersichtlich. Daher gibt es jetzt ein Refactoring in ein Arduino Multifile Projekt.

Zum Refactoring:
Da die Komponenten über globale Variablen verknüpft sind, muss erst einmal eine Entkopplung davon stattfinden. Aus den globalen Variablen werden damit Get() und Set() Routinen, die in einer eigenen C Datei ihren Platz finden. Die globalen Prototypen stehen dann in der zugehörigen Headerdatei.

Die Ausgaben zum Debuggen über die USB Schnittstelle bekommen ein eigenes C File.

Der Sommerzeit Algorithmus bekommt ein eigenes C File.

Der Webserver bekommt ein eigenes C File.

Die einzelnen Hardware-Komponenten bekommen ebenfalls jeweils eine eigenes C File.

Zum ‚gemischten‘ Programmieren mit C und C++ Anteilen:
Geschrieben ist das ganze als C Programm. Da einige Komponenten in C++ programmiert sind bekommen die C Dateien die Dateierweiterung .cpp , damit der Compiler alles durchgehend als C++ kompiliert, sonst gibt es die Fehlermeldung da ‚class‘ keine union oder Struktur ist. Damit kann auch in C auf objektorientierte Methoden zugegriffen werden. Einzige Bedingung: Es muss sich alles innerhalb eines Files befinden (name space).

Zu den Headerdateien:
Es wird ein Konstrukt verwendet, das bei einer mehrfachen Einbindung die mehrfache Deklaration verhindert.
Dieses Konstrukt sieht folgendermassen aus:

#ifndef FILENAME_H
#define FILENAME_H

hier folgen die Definitionen und Prototypen

#endif

Zur Arbeit mit der Arduino IDE:
Hier gibt es rechts oben unter der Lupe einen Pfeil. Da befindet sich ein Eintrag „Neuer Tab“, damit wird eine neue Datei angelegt. So kann man die Dateien erzeugen und gegebenenfalls auch umbenennen oder löschen. Weiter unten ist dann noch einmal eine Liste aller Dateien. Darüber lassen sich die jeweiligen Dateien auch dann anwählen, wenn sie in der oberen Leiste nicht mehr vollständig aufgelistet werden können, weil das Fenster nicht breit genug ist.

Zum Test:
Für die Überprüfung der Funktionalität genügt mir ein ‚Smoke‘ Test. Da nur Funktionen in einzelne Dateien verschoben wurden.

Die vollständigen Messtechnik1-Refactored Sourcen als Zip Datei(Messtechnik1-V2.0)

Literaturhinweise und Links

Martin Fowler, Kent Beck
-Refactoring: Improving the Design of Existing Code

Definition ‚Smoke Testing‘
https://de.wikipedia.org/wiki/Smoke_testing

Definition ’name space‘
http://en.cppreference.com/w/c/language/name_space

Veröffentlicht von

Jürgen

Ich bin Software Ingenieur und habe meine Schwerpunkte in allen Aktivitäten, die zur Software Entwicklung gehören. Am längsten bin ich als Software Entwickler von Embedded Software in C tätig.