Projekt /c | Konzepte

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.

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:


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:


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.


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:


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  ]

Günther Schardinger, GNU C Linux, objektorientiert gcc make makefile C++ Qt Arduino Raspberry Pi, GPIO /dev/gpiochip, 1-Wire und i2c Devices, j8 header, RASPIAN Debian, C im 21. Jahrhundert, Programmieren in C, xterminal