Forum: Mikrocontroller und Digitale Elektronik allgemeine Frage - vielleicht OT ?


von Peter (Gast)


Lesenswert?

Hallo,

wollte mal fragen, ob bei den hiesigen Programmierern für
diverse AVR's Flussdiagramme zum Einsatz kommen.

Wenn ja, gibt's da spezielle Programme für oder wird einfach
jede mögliche Art verwendet?

Werden/können diese dann im Atmel Studio bei den Projekten
hinterlegt?

Wie macht Ihr das überwiegend?

Neugierige Grüße  Peter

von LiIon (Gast)


Lesenswert?

Peter schrieb:
> Wie macht Ihr das überwiegend?
Einfach losprogrammieren. Wenn mit Flussdiagramm, dann Bleistift und 
Papier.

von Wolfgang (Gast)


Lesenswert?

Peter schrieb:
> wollte mal fragen, ob bei den hiesigen Programmierern für
> diverse AVR's Flussdiagramme zum Einsatz kommen.

Flussdiagramme sind im Zeichen von blockorientierter Programmierung 
völliger Unfug. Guck dir mal Nassi-Shneiderman-Diagramme an. Die sind 
erheblich hilfreicher, wenn es um die Entwicklung der Programmstruktur 
geht.
http://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm

von qwertzuiopü+ (Gast)


Lesenswert?

Einfach programmieren. Vielleicht noch hier und da ein
1
// TODO:
2
// was auch immer

einfügen, das hilft, wenn man erst mal das Grundgerüst aufbaut und sich 
zunächst auf entsprechende Details noch nicht konzentrieren möchte 
(Top-Down-Prinzip).

Bis ich ein Flussdiagramm fertig habe, bin ich auch mit programmieren 
fertig. Zumindest wenn ich die Sprache gut beherrsche; tue ich das 
nicht, sind die Programme sowieso sehr einfach und die Frage stellt sich 
gar nicht erst.

von Noch einer (Gast)


Lesenswert?

Für das Zusammenspiel zwischen ISRs und Hauptprogramm sind 
Flussdiagramme das brauchbarste.

Diese AVR Programme bleiben recht klein. Tools für den Entwurf der 
Struktur lohnen sich nicht.

von Kai M. (kai_mauer)


Lesenswert?

Wolfgang schrieb:
> Flussdiagramme sind im Zeichen von blockorientierter Programmierung
> völliger Unfug.

Sagst Du. Gut. Du hast aber nicht das Copyright auf Allgemeingültigkeit.
Es gibt Leute, die lassen sich ihr Werkzeug nicht vorschreiben und 
benutzen nach wie vor Flussdiagramme.

von bal (Gast)


Lesenswert?

Flussdiagramme weniger (aber auch schon mal ab und zu).
State Machines werden immer dokumentiert, auserdem die Architektur 
generell, also das Zusammenspiel der einzelnen Komponenten.
Doku ist wichtig, am Besten paralell zur Implementierung, weil nachher 
macht mans eh nicht mehr.

Die Bastler hier die eh alles in die main.c stopfen machen das natürlich 
nicht. Dementsprechende Sourcen sieht man dann hier oft im Forum.

von thomas (Gast)


Lesenswert?

Also ich finde es durchaus sinnvoll, sich vorher Gedanken zu machen, was 
das Programm nachher leisten soll. Wenn das Konzept steht, braucht man 
es nachher nur noch zu kodieren. Formell gibt es dafür keine Regeln, 
aussagefähig muss es sein. Hat mir übrigens letztens auch ein 
SPS-Programmierer gesagt

von Wolfgang (Gast)


Lesenswert?

Kai Mauer schrieb:
> Es gibt Leute, die lassen sich ihr Werkzeug nicht vorschreiben und
> benutzen nach wie vor Flussdiagramme.

Das Problem daran ist, dass sich die Kapselung, wie sie sich bei 
blockorientierter Programmierung fast von selbst ergibt, in einem 
Flussdiagramm erstmal überhaupt nicht zu Tage tritt. Nicht mal Eingang 
und Ausgangen, wie sie im Programm nachher auftauchen, sind daran wieder 
zu erkennen. Man macht sich das Leben einfach unnötig schwer. Mit 
Vorschreiben hat das nichts zu tun.

Wer einmal Nassi-Shneiderman-Diagramme für den Entwurf in einer 
blockorientierten Programmiersprache verwendet hat, wird davon nie 
wieder zu Gunsten eines Flussdiagramms abrücken.
Wer natürlich einen Spagettiprogrammierstil, am liebsten mit wilden 
Goto-Orgien verwendet, findet sich im Flussdiagramms tausend mal besser 
wieder.

von Kai M. (kai_mauer)


Lesenswert?

Wolfgang schrieb:
> Wer natürlich einen Spagettiprogrammierstil, am liebsten mit wilden
> Goto-Orgien verwendet, findet sich im Flussdiagramms tausend mal besser
> wieder.

Unsinnige Unterstellung.

von Ulrich F. (Gast)


Lesenswert?

Auch hier ist es vermutlich nicht das ODER ...
Sondern eher das "sowohl als auch".
Also kein Grund sich gleich wieder an die Kehle zu gehen....

Und es gibt ja auch noch mehr: Datenflussdiagramme

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Ulrich F. schrieb:
> Datenflussdiagramme

Finde ich 9000 mal  hilfreicher als Flussdiagramme oder 
Nassi-Shneidermann. Grobes Beispiel im Anhang (ich male sowas aber von 
Hand und schreibe formlos noch viel mehr Details dazu).

von Chris M. (yoblid) Benutzerseite


Lesenswert?

Tom schrieb:
> Ulrich F. schrieb:
>> Datenflussdiagramme
>
> Finde ich 9000 mal  hilfreicher als Flussdiagramme oder
> Nassi-Shneidermann. Grobes Beispiel im Anhang (ich male sowas aber von
> Hand und schreibe formlos noch viel mehr Details dazu).

Dito.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Peter schrieb:
> wollte mal fragen, ob bei den hiesigen Programmierern für
> diverse AVR's Flussdiagramme zum Einsatz kommen.

Ich nehme an, du meinst mit Flussdiagrammen Programmablaufpläne (PAPs):

  http://de.wikipedia.org/wiki/Flussdiagramm
  http://de.wikipedia.org/wiki/Programmablaufplan

Kurze Antwort: Nein, ich verwende Programmablaufpläne so gut wie nicht.
Gleiches gilt für Struktogramme (Nassi-Shneiderman-Diagramme).


Etwas längere Antwort (;-)):

Wenn ein Architekt ein Haus plant, fertigt er davon mehrere Zeichnungen
an, die das Haus aus unterschiedlichen Abständen und Richtungen zeigen.
Über den Betrachtungsabstand wird der Detaillierungsgrad festgelegt,
durch die Änderung Betrachtungsrichtung werden Größen wie Länge, Breite
und Höhe des Hauses oder Teilen davon sichtbar gemacht, die in einer
Einzelansicht nicht alle zu erkennen sind. Nur durch Betrachtung aller
dieser Zeichnungen kann sich der Kunde ein Bild davon machen, ob das
geplante Haus tatsächlich seinen Wünschen entspricht.

Genau so ist es bei der Software:

Eine Ansicht davon ist der Quellcode. Er ist – formal gesehen –
vollständig, da er detailliert alle Informationen zu den verwendeten
Algorithmen, Datentypen usw. enthält. Für die zeilgerichtere Planung,
die bessere Übersicht und das späteren Verständnis durch andere ist es
aber sinnvoll, weitere Ansichten anzufertigen.


Vergrößerung des Betrachtungsabstands
=====================================

Wie bei den Zeichnungen des Hauses gibt es die Möglichkeit, den
Betrachtungsabstand zu vergrößeren, d.h. den Detailreichtum zu
verringern, um einen besseren Gesamteindruck zu bekommen. Hier kommen
PAPs ins Spiel, mit denen im Wesentlichen folgendes erreicht wird:

1. Die programmiersprachenspezifische Syntax wird durch generische
   grafische Symbole (Rechtecke, Rauten, Pfeile usw.) und Prosatexte
   ersetzt, was die Lesbarkeit durch weniger geübte Programmierer
   verbessert.

2. Solange nur der Gesamtablauf eines Programms oder eines Teils davon
   dargestellt werden soll, werden Dinge wie z.B. genaue Variablentypen,
   Dimensionierung von Arrays, Fehlerabfragen u.ä. weggelassen, da das
   durch sie erzeugte "Rauschen" die wesentlicheren Aspekte teilweise
   verdecken könnte.

So gesehen sind PAPs eigentlich eine feine Sache. Auch Struktogramme
zielen in die gleiche Richtung, nur dass diese die Kontrollstrukturen
von vornherein auf das beschränken, was in der strukturierten
Programmierung als "sauber" angesehen wird. Das erleichtert die
anschließende Umsetzung in Quellcode, und Spaghetti-Code mit vielen
Gotos kann gar nicht erst entstehen.

Es gibt aber noch eine weitere Darstellungsform mit einer ähnlichen
Ausdruckstärke wie PAPs und Struktogramme: Pseudecode.

Da Pseudokcode kompakter ist und am Computer schneller erstellt und
modifiziert werden kann, ziehe ich ihn den beiden genannten grafischen
Darstellungsformen ganz klar vor.

Wenn man eine Programmiersprache und die strukturierte Programmierung
allerdings gut beherrscht, kann man in den meisten Fällen sogar auf den
Pseudokcode verzichten, denn:

- Die sprachspezische Syntax liest sich dann praktisch genauso schnell
  wie Prosatext, in einigen Fällen sogar noch schneller (da kompakter).

- Ein Programm, das in viele kleine und überschaubare Unterprogramme mit
  aussagekräftigen Namen aufgegliedert wird, verlagert Details immer in
  die jeweils nächsttieferen Ebene in der Unterprogrammhierarchie. Die
  Unterprogrammnamen (ggf. ergänzt durch Kommentare) treten dabei an die
  Stelle des Prosatexts im Pseudokcode.

- Mit etwas Geschick kann man das "Rauschen" in Form von Deklarationen
  Fehlerabfragen u.ä. oft hinreichend von den algorithmischen Teilen des
  Programms zu trennen, so dass es nicht mehr stört. Einige neuere
  Programmiersprachen (die leider nicht für AVRs und andere kleine µC)
  verfügbar sind), unterstützen diese Trennung sogar explizit.

Eine Dokumentation mit Pseudocode braucht man dann nur noch an den ganz
seltenen Stellen, wo der eigentliche Algorithmus wegen Defiziten der
Programmiersprache oder auf Grund von unvermeidlicher Handoptimierung
unleserlich wird. Pseudocode hat hier gegenüber grafischer Diagramme den
Vorteil, dass man ihn als Kommentar direkt in den Quellcode integrieren
kann, was die Pflege bei späteren Änderungen erleichtert.

Den Sinn von PAPs und Struktogrammen sehe ich vor allem bei Leuten, die
eine Programmiersprache gerade erlernen oder darin noch nicht sehr
sattelfest sind. Durch das Zeichnen des Diagramms und dem anschließenden
Schreiben des Quellcodes werden die Entwicklung des Programmablaufs und
die Auseinandersetzung mit syntaktischen und semantischen Eigenheiten
der Programmiersprache zeitlich voneinander getrennt, so dass man sich
immer nur auf jeweils eine der beiden nicht ganz leichten Aufgaben
konzentrieren muss. Auch für einen Lehrer ist es leichter, seinen
Schüler zu beraten, da er anhand des Diagramms schneller sehen kann, ob
der Schüler überhaupt den richtigen Ansatz für das zu erstellende
Programm gefunden hat.


Veränderung der Betrachtungsrichtung
====================================

Die Vergrößerung des Betrachtungsabstands (d.h. die Verringerung des
Detaillierungsgrads), wie sie durch PAPs, Struktogramme und Pseudocode
bewerkstelligt wird, ist aber nur ein Aspekt, um den Überblick über
komplexe Programe zu er- und behalten.

Wie oben am Beispiel des Hauses erläutert, kann man nicht nur den
Abstand, sondern auch die Richtung der Betrachtung variieren.
Dafür gibt es sehr viele Möglichkeiten, die ich hier nicht alle
aufzählen kann.

Ein sehr gutes Beispiel hat weiter oben Tom gezeigt:

Tom schrieb:
> Grobes Beispiel im Anhang

Es handelt sich dabei um ein Datenflussdiagramm. Es entsteht aus dem
Quellcode (sofern in einer imperativen Sprache wie C, C++, Pascal oder
Basic geschrieben) nicht einfach durch Weglassen von Syntax und Details,
und man kann umgekehrt auch nicht durch Hinzufügen von Syntax und
Details das Diagramm direkt und ohne viel Denkarbeit in Quellcode
überführen. Deswegen ist es eine komplett andere Ansicht des Programms,
die viele Dinge zeigt, die einem beim Betrachten eines PAPs verborgen
bleiben. Wie der Name bereits sagt, handelt es sich hier um eine
datenflussorientierte Ansicht, während beim PAP der Kontrollfluss im
Vordergrund steht.

Das Sequenzdiagramm ist weitere wichtige Ansicht:

  http://de.wikipedia.org/wiki/Sequenzdiagramm

Mit ihm können zeitliche Abfolgen, Synchronisation und Kommunikation
von/zwischen nebenläufigen Programmteilen auf einem oder mehreren
Prozessoren beschrieben werden.

Programmteile, in denen eine Aktivität durch Ereignisse getriggert wird
(wie bspw. die byteweise Verarbeitung von Nachrichten über eine serielle
Schnittstelle) können übersichtlicher durch ein Zustandsdiagramm
dargestellt werden:

  http://en.wikipedia.org/wiki/State_diagram

Es gibt aber auch Darstellungsformen, die schon wesentlich älter als die
Softwareentwicklung sind. Ein Beispiel sind geometrische Skizzen. Die
Auswertung von GPS-Koordinaten, das Herausrechnen der perspektivischen
Verzerrung eines Kamerabildes oder die Berechnung einer Roboterkinematik
(um nur einige Beispiele zu nennen) würden trotz ihrer Komplexität in
einem PAP, Struktogramm oder Datenflussdiagramm als ein einzelner Block
mit ein paar dicken Formeln dargestellt werden. Nachvollziehen kann man
diese aber erst mit einer entsprechenden Skizze.

Alle vier in diesem Abschnitt genannten Darstellungsformen sind meiner
Meinung nach viel wichtiger als PAPs und Struktogramme, da ihr Inhalt
nur sehr schwer aus dem Quellcode extrahiert werden kann. Umgekehrt ist
es auch schwierig, den Quellcode zu schreiben, bevor man sich diese
Dinge visuell klar gemacht hat. Des Weiteren sind mir auch keine
textuellen Beschreibungsformen (vergleichbar mit Pseudocode) bekannt,
die als vollwertiger Ersatz für die Diagramme dienen könnten

Das heißt aber nicht, dass man jetzt krampfhaft versuchen sollte, mit
jedem dieser Diagrammtypen das komplette Programm zu beschreiben.
Vielmehr überlegt man sich für jeden komplexeren Programmteil, welcher
Typ diese Komplexität am übersichtlichsten darstellt bzw. ob der
Quellcode mit Kommentaren nicht schon aussagekräftig genug ist.

Man ist man dabei natürlich auch nicht auf die Diagrammtypen nach DIN,
ISO, UML und anderen (De-facto-)Standards beschränkt. Erlaubt ist alles,
was einem selbst oder anderen das Leben leichter macht.

von Peter (Gast)


Lesenswert?

Vielen lieben Dank für die zahlreichen Antworten.

Sind für mich sehr interessante Ansätze vorhanden,
die bei mir sicherlich auf die eine oder andere Art
zur Anwendung kommen werden.

Hat sich gelohnt.

Gruß  Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.