Es muss nicht immer gleich das komplette Grafical User Interface (GUI) genutzt werden. Es ist auch möglich, mit der Programmierung der einfachen Schnittstelle eines Displays anzufangen. Diese bildet die Grundfunktionen für Ausgaben auf einem Grafikdisplay ab:
Es soll als Erstes die Grundstruktur einer einfachen µGL Anwendung ohne GUI-Komponenten besprochen werden.
Falls Sie noch das Projekt vom Schnellstart offen haben, können Sie diesen Punkt überspringen.
Erstellen Sie eventuell ein neues Projekt. Wählen Sie das Projekt-Profil ARM-Vorgehensmodell. Das Grafik-Framework, Vorlagen und Beispiele werden aus dem SiSy LibStore online bezogen. Sobald Sie das Projekt erstellt haben, bietet Ihnen SiSy geeignete Vorlagen aus dem LibStore an.
Grenzen Sie die Liste ggf. mit dem Suchbegriff „UGL“ ein.
Wählen Sie die Vorlage microGL Framework. Nach dem Laden der Projektvorlage für das µGL-Framework erhalten Sie eine Darstellung im Diagrammfenster, die folgende Elemente enthält:
Die Pakete enthalten im Wesentlichen zwei Bibliotheken. Das ist das SiSy ARM C++ Framework für den STM32 und das µGL Framework. Des Weiteren erhalten Sie zwei Klassendiagramme mit Grundgerüsten für Grafikanwendungen als Vorlage. Dabei wird zwischen Anwendungen mit und ohne GUI Komponenten der µGL unterschieden. Schauen Sie sich ruhig ein bisschen in den Paketen um (rechte Maustaste… „nach unten“).
Gehen Sie in Ihrem Projekt auf die oberste Hierarchieebene (rechte Maustaste… „nach oben“, bis zum Vorgehensmodell). Ziehen Sie ein Element vom Typ Klassendiagramm per Drag & Drop in das Diagrammfenster des Vorgehensmodells. Geben Sie dem Diagramm einen möglichst sinnvollen Namen.
Legen Sie die Hardware für die Zielplattform fest. Mit den empfohlenen Boards kommen dabei folgende Varianten infrage:
Nachdem Sie die korrekte Zielhardware eingestellt haben, öffnen Sie das neue Klassendiagramm (rechte Maustaste „nach unten“). Es wird Ihnen aus dem LibStore eine Auswahl von Diagrammvorlagen angeboten. Schränken Sie die Anzahl der Vorlagen zum Beispiele mit dem Suchbegriff UGL ein. Wählen Sie die Vorlage „Grundgerüst einfache µGL Anwednung für STM32F4xx“. Achten sie auf die Bezeichnung der Zielhardware.
Importieren Sie die gewählte Diagrammvorlage aus dem LibStore.
Das Grundgerüst für eine einfache Grafikanwendung ist recht übersichtlich. Es umfasst folgende Elemente:
Die Applikationsklasse enthält die Operationen:
Die notwendige Initialisierung des Displays wurde durch die Zuweisung des/der korrekten Templates zum Display erledingt. Wir können sofort mit den ersten Grafikausgaben beginnen. Sollte die Operation onStart bereits Beispielcode enthalten, löschen Sie diesen bitte. Wir möchten den Code Stück für Stück erstellen und möglichst verstehen
Wen die Hintergründe nicht so interessieren der macht weiter mit dem Erstellen und Flashen der Anwendung.
Auch eine einfache Grafikanwendung besteht nicht nur aus zwei oder drei Klassen. Es ist der Rückgriff auf eine Reihe von Paketen (Bibliotheken) erforderlich, um den Aufwand für den Anwendungsentwickler erträglich zu halten. Die benötigten Pakete umfassen zum einen die Basispakete für den Controller selbst und zum anderen die Gerätetreiber und Unterstützungspakete für das Display.
Die Anwendungsklasse (Hauptklasse) realisiert einen ArmAppKernel. Um herauszufinden welche Eigenschaften unsere Anwedung durch die Zuweisung besitzt, folgen wir dem Template. Mit rechte Maustaste, Quelldiagramm öffnen navigiert SiSy den Anwendungsentwickler zum originalen „Standort“ einer verknüpften Klasse oder eines Templates.
Das Template ArmAppKernel enthält offensichtlich die Hauptfunktion main mit der Initialisierungssequenz und der Hauptschleife (mainloop) sowie den SysTickHandler. Bei näherer Betrachtung der Operationen scheint der AppKernel noch die Rolle eines Nachrichtenverteilers und Scedulers zu spielen. Folgen wir der Realisierungslinie weiter.
Jetzt wird der Umfang unserer Anwendung klarer. Die Klasse Application ist ein AppKernel und gleichzeitig ein AppModul. Damit verfügt die Application über folgende Eigenschaften:
Wie bereits erwähnt, navigiert SiSy mit rechte Maustaste, Quelldiagramm öffnen den Anwendungsentwickler zum originalen „Standort“ einer verknüpften Klasse oder eines Templates. In SiSy erfolgt die Zuweisung von konkreten Ressourcen an ein abstraktes Interface oft über das Tempos-Konzept. Dabei handelt es sich um abstrakte generische Strukturen, aus denen baukastenartig konkrete Klassen zusammengesetzt werden (generische Klassen). Der SiSy-Codegenerator fügt die einzelnen Templates und Interfaces sowie Parameter zu einer kompletten Klasse, in diesem Fall einer Display-Treiberklasse, zusammen.
Wählt man das betreffende Template aus, sind die konkreten Realisierungsparameter sichtbar.
Schaltung: STM32F407-Discovery mit LCD-Adapter + LCD-Modul ohne Latch LCD Bus STM32F407 21 = DB00 01 D8 22 = DB01 02 D9 23 = DB02 03 D10 24 = DB03 04 D2 ... ... ... 28 = DB03 04 D11 07 = DB04 05 E4 ... ... ... 14 = DB15 E15 04 = RS 19 B1 05 = WR 20 B0
Der Anwendungsentwickler muss „nur noch“ das bzw. die geeigneten Templates an seine Realisierungsklasse „anhängen“ und den Rest erledigen der Codegenerator und der Compiler.
Das Display verfügt über einen eigenen Speicher (Framebuffer). Dieser Speicher enthält das aktuell darzustellende Bild. Nach einem Reset des Controllers ist dieser Speicher noch mit den zuletzt dargestellten Inhalten gefüllt. Es ist somit empfehlenswert, sichereitshalber am Anfang das Display immer aufzuräumen. Das geschieht, indem wir dem Display die Nachricht clearScreen senden. Sollte aus dem Schnellstart oder aus der Vorlage noch Beispielcode in der Operation onStart enthalten sein, löschen Sie diesen bitte. Tragen Sie folgende Codezeilen in die Operation OnStart ein:
onStart():
// das Display löschen display.clearScreen();
Wählen sie im Aktionsmenü (grüner Mann) Erstellen, Brennen und Ausführen.
Auf dem Display zeigt sich nach dem erfolgreichen Erstellen und Übertragen folgendendes Bild:
Somit haben wir auch schon unsere erste Grafik-Anwendung erstellt und auf den Controller übertragen. Als Zusammenfassung dieses kurzen Abschnittes das Ganze nochmal als Video.
Naja, Bild ist für das was jetzt auf dem Display zu sehen ist vielleicht etwas übertrieben
Wir sollten als Nächstes ein kleines „Hallo Welt Display“ ausgeben.