Vorgehen zur Erstellung eines lauffähigen...
Transcript of Vorgehen zur Erstellung eines lauffähigen...
Programmablaufpläne
Vorgehen zur Erstellung eines lauffähigen C-Programms
Dieser Leitfaden soll eine Einführung in das Erstellen von Programmablaufplänen (kurz: PAP) geben.
PAP erleichtern das Erstellen von (C-)Prorammen und den Prozess von der Idee zum Code
strukturierter machen. Programmablaufpläne dienen als Orientierung, sowohl beim Implementieren
des Codes als auch bei dessen Debugging. Das Vorgehen zum Erstellen eines lauffähigen C-
Programms mit Hilfe von PAP kann in vier Schritte gegliedert werden:
1.) Design des Programmablaufs mit Hilfe von PAP
2.) Implementierung des Programmablaufs in C-Code
3.) Test und Debugging
4.) (Gegebenenfalls) Anpassung des PAP (zurück zu Schritt 1)
Sollte sich nach Schritt Nr. 3 herausgestellt haben, dass das Programm nicht wie konzipiert
funktioniert, sollte zu Schritt 1 zurückgekehrt werden, um den Programmablauf anzupassen und
anschließend die Verbesserungen erneut in Code zu implementieren.
Dieser Ablauf zur Progammerstellung lässt sich nun selbst beispielhaft als PAP realisieren, wie in der
folgenden Abbildung zu sehen ist.
Die Elemente eines Programmablaufplans
Wie im vorherigen Beispiel zu sehen, bedient sich ein Programmablaufplan verschiedener grafischer
Elemente. Diese Elemente sind in der DIN 66001 standardisiert.
Start und Ende eines Programms
Der Start und das Ende eines Programms wird mit einem
Rechteck mit abgerundeten Ecken symbolisiert. Dieses Element
wird auch Terminator genannt. Terminatoren werden sowohl in
der main-Routine, als auch in anderen Funktionen verwendet. In
diesen Fällen symbolisieren sie den Anfang und das Ende der
aufgerufenen Funktion.
Verbindungen zwischen den Elementen
Die Verbindung zwischen den Elementen geschieht mit Hilfe von
Pfeilen. Ob hierbei Pfeile mit geschlossenem oder offenem Pfeil
genutzt werden, ist dem Nutzer freigestellt.
Ausführen einer Tätigkeit
Das Ausführen einer Tätigkeit wird mit einem Rechteck
symbolisiert. Dies beinhaltet einfache Tätigkeiten, jedoch nicht
das Aufrufen einer Funktion. Dies kann beispielsweise das Prüfen
eines vorher eingelesenen Wertes sein. Ebenso wird dieses
Symbol beispielsweise zum Initialisieren von Variablen oder der
Durchführung von Rechnungen genutzt.
Ein- und Ausgabe
Um Ein- und Ausgaben klarer zu kennzeichnen, können diese mit abgeschrägten Rechtecken
dargestellt werden. In diesem Fall werden in der linken unteren Ecke Eingaben mit „E“ und Ausgaben
mit „A“ gekennzeichnet.
Funktionsaufruf
Innerhalb eines PAP können weitere Funktionen
aufgerufen werden. Diese Funktionsaufrufe
besitzen wiederum einen eigenen PAP. Um den
Aufruf einer Funktion vom Ausführen einer
Tätigkeit unterscheiden zu können, besitzt das
Symbol doppelte vertikale Linien. Nach dem
Wechsel in den PAP der aufgerufenen Funktion
wird dessen Programmablauf durchlaufen. Ist
diese beendet springt der Programmfluss zu dem
aufrufenden PAP zurück.
Zwischen den vertikalen Linien kann der Name
oder die Beschreibung der aufzurufenden
Funktion stehen. Diese Besonderheit dient der
Übersichtlichkeit zwischen den verschiedenen
Programmen.
Datenfluss im PAP anhand von Beispielen
if-else-Verzweigungen
Eine Verzweigung wird mit Hilfe einer Raute modelliert werden. Von der Raute führen jeweils zwei
Pfeile weg. Ein Pfeil, falls die Bedingung der Verzweigung zu true evaluiert wird und ein Zweiter für
den Fall false. Es müssen immer beide Fälle modelliert werden müssen.
Ein Beispiel für eine Verzweigung wäre beispielsweise die if-Verzweigung. Der folgende PAP hat
zudem ein Code Snippet angefügt, wie eine äquivalente Umsetzung in C-Code aussehen könnte.
else if-Verzweigungen
Die folgenden Grafiken zeigen den PAP im Falle einer else if-Verzweigung. Anhand der Pfeile wird
hier deutlich, dass im Falle einer erfolgreichen if-Verzweigung die else if-Verzweigung nicht mehr
ausgewertet wird.
Verschachtelte if-Verzweigung
Das folgende Beispiel zeigt den Programmablauf bei dem Einsatz verschachtelter if-Verzweigungen.
while-Schleife
Die while-Schleife ist eine kopfgesteuerte Schleife. Nach der Prüfung der Bedingung wird der
Schleifenrumpf entweder ausgeführt oder übersprungen. Im Falle einer erfolgreichen Evaluation
kehrt das Programm nach dem Ausführen des Inhalts wieder zur Kopfbedingung zurück und evaluiert
diese erneut.
do-while-Schleife
Bei der do-while-Schleife wird der Schleifenrumpf ausgeführt bevor die Bedingung überprüft wird.
Die do-while-Schleife ist daher eine fußgesteuerte Schleife. Bei dieser Schleife wird somit der Rumpf
in allen Fällen mindestens einmal ausgeführt.
for-Schleife
Die for-Schleife ist eine kopfgesteuerte Schleife. Eine for-Schleife nutzt eine Schleifenvariable. Nach
Prüfung der Bedingung wird der Schleifenrumpf entweder ausgeführt oder übersprungen. Nach
Durchlaufen des Schleifenrumpfs wird eine Schleifenvariable in- oder dekrementiert. Im Falle einer
erfolgreichen Evaluation kehrt das Programm nach dem Ausführen des Inhalts wieder zur
Kopfbedingung zurück und evaluiert diese erneut. Die Abbruchbedingung ist im Regelfall das
Erreichen eines Grenzwertes der Schleifenvariable.
Das folgende Code-Snippet zeigt den Code einer simplen for-Schleife mit der äquivalenten
Implementierung als while-Schleife.
Inbetriebnahme PAP-Designer
Das für die Erstellung der hier gezeigten PAP wurde der PapDesigner genutzt. Dieser ist für private
Nutzung kostenlos unter folgender Adresse zu beziehen:
http://friedrich-folkmann.de/papdesigner/Hauptseite.html
Natürlich können PAP auch mit Hilfe von Tools wie Microsoft Visio oder Inkscape erstellt werden. Der
PapDesigner bietet jedoch eine unkomplizierte Möglichkeit dies ohne größere Vorarbeiten zu tun.
Programmablaufpläne Übung
Erstellen eines PAP
Diese Übung basiert auf der Aufgabe A2 im Abschnitt 5.4 aus dem Buch Embedded Programming –
Basiswissen und Anwendungsbeispiele der Infineon XC800-Familie von Prof. Dr.-Ing. Reiner Kriesten.
Aufgabe 1.)
Erstellen Sie den PAP für die main-Funktion.
Verteiltes Arbeiten mit mehreren Modulen und deren Ablaufpläne
Übung: Stoppuhr
Diese Übung basiert auf der Aufgabe A2 im Abschnitt 10.7 aus dem Buch Embedded Programming –
Basiswissen und Anwendungsbeispiele der Infineon XC800-Familie von Prof. Dr.-Ing. Reiner Kriesten.
Aufgabe 1.)
Lesen Sie die Aufgabenstellung und bestimmen Sie die Anzahl der notwendigen PAPs um das zu
erstellende Programm zu modellieren. Nennen Sie zudem den Abschnitt des Programms, den der
jeweilige PAP modelliert. Hinweis: Das Update der 7-Segment-Anzeige ist ein separater PAP und
muss in dieser Übung nicht erstellt werden
Aufgabe 2.)
Was ist der Unterschied zwischen dem PAP einer Interrupt Service Routine (ISR) und der eines
Funktionsaufrufs?
Aufgabe 3.)
Der folgende PAP zeigt die main-Funktion der Stoppuhr. In ihm sind einige Blöcke des PAPs jedoch
entfernt und mit Platzhaltern ersetzt. Zeichnen Sie die fehlenden Blöcke und nummerieren Sie diese.