Die Werkstatt Projekt /c unterstützt die Erstellung von Programmen unter Linux. Bei diesem Prozess spielt der C-Compiler nur eine kleine Rolle. Es folgt eine Übersicht der Projekt /c zugrundeliegenden Konzepte. Alle Programme wurden zum persönlichen Gebrauch implementiert, sind Open-Source und 'work in progress'.
Motivation
Im Jahre 2015 habe ich begonnen, mich mit Steuerungen am Raspberry Pi und auf Arduino zu beschäftigen. Dazu habe ich nach einer passenden Programmierumgebung gesucht. Bei der Suche ist meine Erfahrung mit vielen Programmiersprachen eingeflossen.
- Programme sollten einfach zu codieren sein
- In Frage kommen nur Compilersprachen
- Einfache Programmerweiterung und Fehlersuche sind wichtig
- Alle Lösungen sollten problemlos auf verschiedene Rechner übertragen werden können
Linux, der gnuc C-Compiler und die Laufzeitbibliothek Libc waren für mich geeignete Kandidaten. Im Laufe der folgenden Jahren hat sich Projekt /c entwickelt.
Außerdem benötige ich am PC stabile Hilfsprogramme die schnell an aktuelle Erfordernisse angepasst werden können:
- Aufsetzen und Warten von Rechnern mit Linux
- Programm zum Sichern und Synchronisieren der Daten
- Verwaltung des Fotoarchivs
- Webseiten erstellen und pflegen
Anforderungen
Projekt /c unterstützt die Organisation komplexer Projekte, die Wiederverwertung von Programmteilen, die Dokumentation. Es vereinfacht die Fehlersuche und spätere Programmänderungen.
Basis C99
Die Programmiersprache ist C im Standard C99 und die Laufzeitbibliothek Libc. Damit sind die erzeugten Programme auf jedem Linux-System mit dem gcc Compiler sofort lauffähig. Viele Libc Funktionen sind aber absturzgefährdet und es fehlen noch wichtige Hilfsfunktionen.
Projekt /c bietet ergänzende Bibliotheken mit Hilfsfunktionen. Diese Bibliotheken bieten neben komplexen Hilfsfunktionen auch absturzsichere Kopien zu Libc Funktionen.
Beispiel: Libc Funktion strcmp(NULL,NULL) stürzt ab, die Funktionkopie StrCmp(NULL,NULL) nicht.
Hilfsfunktionen
Hilfsfunktionen aus Projekt /c können, aber müssen nicht verwendet werden! Ein kleine Auswahl aus dem Angebot:
- Fehlerobjekt für einfache aber reichhaltige Fehlerbehandlung
- Stringfunktionen
- Globale Laufzeitvariablen
- Verschiedene Ein- und Ausgabedialoge
- Zugriff auf System- und Dateifunktionen
- Konfigurationsdateien lesen und schreiben
- Datenarrays lesen und schreiben
- Andere Linuxprogramme starten
- . . .
Implementierung
Die Hilfsfunktionen findet man in den statische Bibliotheken. Für diese Funktionen gibt es Testprogramme zur Dokumentation und Verifikation.
Die zweite Möglichkeit sind Linkbibliotheken. Bei Ansteuerung von Hardwarekomponenten hat sich eine dynamischere Vorgangsweise bewährt. Diese Module werden in Ordnern abgelegt und in die Programme mit symbolischen Links eingefügt. Verbesserungen der Module stehen damit sofort allen Programmen zur Verfügung.
Die Hilfsfunktionen werden entweder durch Aufrufe in Libc oder aber durch Linux bash-Funktionen implementiert. Der zweite Weg hat sich als sehr effizient erwiesen.
Der Programmablauf ist übersichtlich: Wenn das Programm sich nicht mit Daten beschäftigt ist, ist es immer in einer Eingabefunktion. Alle Eingabefunktion verwenden nicht blockierend Funktion readKbd() in der auch die Interrupts abgewickelt werden.
Projekt /c setzt auf kleine Programmmodule, da jedes Programm weitere Programme aufrufen kann. Die aufgerufenen Programme können auch im Hintergrund laufen oder das Startprogramm vollständig ersetzen. Gleichzeitig laufende Programm können auch über einen gemeinsamen Speicherbereich Daten austauschen. Ich verwende daher keine Thread's , was das Debugging sehr vereinfacht.
Dokumentation
Das Schreiben von Dokumentationen ist mühsam, also muss Dokumentation 'on the fly' erfolgen.
- Es gibt ein paar fixe Regeln für Bezeichner von Konstanten, Laufzeitvariablen und Funktionen
- Bei Objektfunktionen wird der Funktionsname immer mit dem Modulnamen eingeleitet
- Die Basisdokumentationen befinden sich immer in den Headerdateien
- Der Sourcecode sollte ohne Remarks auskommen. Ausnahme sind sehr komplizierte Funktionen
- Für komplexe Programme gib es Dokumentationen im Format *.odt und *.pdf
Programmumgebung
Werkstatt Projekt /c befindet sich vollständig in einem Ordner. Für Erweiterungen oder Tests können Parallelordner ohne System verwendet werden.
Zur Verwaltung gibt es den Projektbrowser 'chelp:
- Das Setup von Projekt /c kann unter Einstellungen überprüft oder eingestellt werden
- Suche nach Dateien oder Strings
- Infos zu Farben, Tastencodes, Promptstrings, UTF-8 Codes usw.
- Stichwortsuche, Read.me Dateien, man Seiten usw.
- Programme oder Libraries anlegen/compilieren/ausführen
- Dokus in den Headern der statischen Bibliotheken lesen
- Hilfsfunktionen suchen und Dokus anzeigen
- Sourcen suchen und anzeigen
Erfahrungen
Das Gespann gnuc Compiler und make erlaubt es heterogene Projektdateien zusammenzufassen. Zum Beispiel können in Programmen für den Raspberry Pi auch Header vom Arduino eingebunden werden.
Insgesamt bleiben auch bei Programmen mit vielen Modulen die Hierarchien sehr flach. Um eine Programmänderung durchzuführen reicht es meist, nur die Dialogüberschrift im Sourcecode zu suchen. Man landet dann bei direkt der gesuchten Funktion.
Als Benutzerinterface verwende ich ein XTerminal und für grafische Daten - z.B Wetterdaten - verwende ich den Webbrowser.
Wenn ein grafisches Benutzerinterface gewünscht wird, würde ich ein Webinterface kodieren. Meine Versuche mit gtk in einem Parallelordner von Projekt /c haben mich nicht überzeugt.
[ Vorwort ] | Geschichte und Konzepte von Projekt /c |
[ Dokus ] | Dokumentationen Projekt /c |
[ Home ] [ Copyright Günther Schardinger, GNU General Public License ]