In einer Schritt-für-Schritt Anleitung wird in diesem Abschnitt gezeigt, wie man seine eigene Bibliothek in Prop-C aufbaut. Es wird gezeigt,
Bevor wir starten, sollte auf dem eigenen Rechner
Jeder, der schon einmal eine interessante Anwendung entwickelt hat, wird auf dem weiteren Weg viele der Aufgabenteile, die innerhalb der Anwendung häufig aufgerufen werden, in Funktionen ausgelagert und damit das Programm lesbarer und übersichtlicher gestaltet haben.
Leider lassen sich diese Funktionen in einer neuen Anwendung nicht einfach übernehmen; na gut, mit copy und paste funktioniert das, aber es ist umständlich und zeitaufwändig. Besser wäre, die häufig genutzten Funktionen in eine Bibliothek aufzunehmen und diese in ein neues Programm einzubinden, so wie wir das auch mit simpletools machen.
Starten wir mit einem kleinen Beispielprogramm, das zwei Funktionen enthält, die in weiteren Anwendungsprogrammen eingesetzt werden sollen.
Die Terminalausgabe zeigt die Wirkung der beiden Funktionen awesome und epic.
Die beiden Funktionen des Anwendungsprogramms sollen jetzt in eine Bibliothek übernommen werden. Die Vorwärtsdeklarationen im Programm (Abb. 1, Zeilen 3 und 4) fallen weg, sobald man über einen Bibliotheksaufruf auf Funktionen zugreifen möchte. Es genügt, nur noch die Bibliothek selbst zu Beginn eines Programmes über ihren Namen aufzurufen, so wie wir es mit
#include simpletools
bei jedem C-Programm bisher gemacht haben.
Der erste Schritt beim Anlegen einer Bibliothek genial ist immer, die Anwendung als libgenial im Ordner libgenial abzuspeichern. Dieser Ordner muss sich im Ordner Simple Libraries im Arbeitsbereich von SimpleIDE befinden, damit SimpleIDE darauf zugreifen kann. Um ein wenig Ordnung hineinzubringen, wird im Ordner Simple Libraries noch ein Unterordner MeineBibliotheken angelegt.
Das Programm genial.c
Im Verzeichnis MeineBibliotheken/genial sollten sich jetzt zwei Dateien befinden: die Quelldatei libgenial.c und die Projektdatei libgenial.side. Sollten nicht beide Dateien dort abgelegt worden sein, dann lösche den Ordner und gehe die einzelnen Schritte der Aufgabenbeschreibung noch einmal durch.
Eine einfache Bibliothek benötigt einen sogenannten header file oder eine Kopfdatei. Erinnern wir uns, jede Funktion, die in ein C-Programm eingebunden ist, erhält eine forward-Deklaration mit dem Funktions-Prototyp, damit der Compiler weiß, was auf ihn zukommt.
Im Kopf einer Bibliothek werden diese Prototypen der Funktionen gebündelt und man erspart sich damit die sonst üblichen forward Deklarationen, wenn eine Funktion aus der Bibliothek aufgerufen wird. Nutzt eine Bibliothek Funktionen aus anderen Bibliotheken, dann müssen im Bibliothekskopf diese Bibliotheken mit #include eingebunden sein.
Im folgenden Schritt erstellen wir eine .h Datei für die Bibliothek libgenial.
Im Editorfenster von SimpleIDE sollten jetzt zwei Register zu sehen sein: libgenial.c und genial.h.
Jetzt hat die Bibliothek ihren Kopfeintrag mit forward Deklaration und Quelldateien mit Funktionen. Die Datei libgenial ist weiterhin wichtig; mit ihr wird die Bibliotheksausgabe aufgebaut und die Funktionen getestet und überprüft, ob sie auch das tun, was von ihnen erwartet wird.
Im Terminal erscheint, wenn alles funktioniert der folgende Text:
Wird in einer Applikation die Funktion pause aus der Bibliothek simpletools aufgerufen, dann arbeitet der Compiler nicht mit der .c Datei. Stattdessen hält er Ausschau nach einer Datei libsimpletools.a. Das Suffix .a steht für Archiv und die Datei selbst ist ein binäres Abbild des compilierten C-Quellcodes. Mit diesen Dateien lässt sich der Umfang des Programmcodes reduzieren. Das werden wir jetzt zeigen.
Das sich öffnende Fenster Project Manager sollte ähnlich wie in der folgenden Abbildung aussehen
Propeller GCC arbeitet mit verschiedenen Speichermodellen. Wir nutzen CMM und starten mit diesem Speichermodell den Kompiliervorgang für die Bibliothek.
Der nächste Schritt ist sehr wichtig; das Projekt muss konfiguriert werden, damit es die Archivdateien der Bibliothek erzeugen kann.
Erst nachdem alle Einstellungen vorgenommen und anschließend noch einmal überprüft wurden, kann das Bibliotheksarchiv für das kompakte Speichermodell erstellt werden.
Im Unterverzeichnis cmm befindet sich jetzt eine Datei libgenial.a.
Der Programmcode kann natürlich auch mit anderen Speichermodellen kompiliert werden. Probieren wir es mal mit dem LMM (large memory model) aus, das den Programmcode schneller ausführt aber für das gleiche Programm auch mehr Speicherplatz benötigt.