www.mikrocontroller.net

Forum: PC-Programmierung C-Code -> Zustandsautomat


Autor: 0fh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin momentan für ein C Projekt auf der Suche nach einer Software, 
die es ermöglicht aus dem C-Code heraus eine übersichtlichere 
Darstellung zu generieren. Ideal wäre, wenn der C Code (mit 
Funktionsaufrufen und Returns) in einem Zustandautomaten abgebildet 
wird. Ein kurzes Googlen ergab leider keinen großen Erfolg. Evtl. kennt 
hier jemand eine solche Software, die er vielleicht sogar empfehlen 
kann. Das würde mir einiges an Handarbeit ersparen. Vielen Dank im 
Voraus!


Autor: Ha Jo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hier ein Artikel über Statemachines (in englisch).

Am Ende gibt es einen Link für den Download von
C-Source dazu. Hab es nicht eingesetzt, aber beim
durchsehen des Sources machte es einen übersichtlichen
Eindruck.

Vielleicht kannst Du ja etwas damti anfangen.

Kuckst Du hier:
http://www.embedded.com/showArticle.jhtml?articleID=10700829

Joachim

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ideal wäre, wenn der C Code (mit
> Funktionsaufrufen und Returns) in einem Zustandautomaten
> abgebildet wird.

Hmm.
Ein Programm das ein beliebiges Anderes analysiert und einen
äquivalenten Zustandsautomaten erzeugt stelle ich mir schwierig
vor. Ich würde sogar sagen, dass du berühmt würdest wenn du
sowas hinkriegst, denn das würde das Turing-Halteproblem lösen.
Nur leider hat Alan Turing vor mehr als 60 Jahren bewiesen,
dass das im Allgemeinen nicht möglich ist.

Autor: Ha Jo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh mann, da hab ich wohl etwas falsch verstanden. :-(
Aber es steht ja da:

> auf der Suche nach einer Software,
> die es ermöglicht aus dem C-Code heraus eine übersichtlichere
> Darstellung zu generieren

Da ist eigentlich nichts falsch zu verstehen.

Ist auch warm hier, ca: 29°C, da arbeitet mein Denkaparat
nicht mehr so richtig.

Sorry.

Joachim

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Angeregt durch Karl heinzs Beitrag möchte ich nun auch etwas
rumtheoretisieren. Konkreter wird's dann weiter unten :-)

Computer werden üblicherweise als äquivalent zu einer Turing-Maschine
betrachtet, da man dadurch grundlegende Erkenntnisse der theoretischen
Informatik in die Praxis umsetzen kann. Bei der Entwicklung von
Programmiersprachen wie C wird darauf geachtet, dass sie Turing-
vollständig sind, d. h. dass in ihnen jede beliebige Turing-Maschine
realisiert werden kann.

Ich gehe davon aus, dass du mit Zustandsautomat einen endlichen
Automaten meinst. Endliche Automaten sind weniger mächtig als
Turing-Maschinen, d. h. jeder endliche Automat kann als
Turing-Maschine dargestellt werden, aber nicht umgekehrt.

Aus dem Geschriebenen folgt, dass ein C-Programm im Allgemeinen nicht
endlicher Automat dargestellt werden kann.

So ist das zumindest in der Theorie.

In der Praxis sieht es anders aus: Computer sind keine Turing-
Maschinen, sondern endliche Automaten, weil sie auf Grund der
begrenzten Speicherkapazität nur endlich viele Zustände annehmen
können*. Damit lassen sich entgegen dem oben Geschriebenen alle
C-Programme, die auf einem realen Computer lauffähig sind, ebenfalls
durch einen endlichen Automaten beschreiben. Man kann sogar alle auf
einem Computer lauffähigen Programme durch endliche Automaten
darstellen, die dieselben Zustände (alle möglichen Speicher- und
Registerbelegungen) und Zustandsübergänge (gegeben durch den
Hardwareaufbau) haben und sich lediglich in ihrem Anfangszustand
unterscheiden. D. h. du kannst dir (theoretisch) den Zustandsgraphen
mit einem sehr spitzen Bleistift und viel Geduld auf ein großes Stück
Papier malen, dieses an die Wand hängen und für jedes Programm, das du
entwickelst, den zugehörigen Startzustand farblich markieren. Damit
hast du die gewünschte Darstellung. Ob diese übersichtlicher ist als
der C-Quellcode wage ich allerdings zu bezweifeln.

> Ein Programm das ein beliebiges Anderes analysiert und einen
> äquivalenten Zustandsautomaten erzeugt stelle ich mir schwierig vor.
> Ich würde sogar sagen, dass du berühmt würdest wenn du sowas
> hinkriegst, denn das würde das Turing-Halteproblem lösen.

Das ist hier nicht das Problem. Geht man vom (unendlichen)
Turing-Modell aus, ist die Umsetzung in einen endlichen Automaten
nicht etwa schwierig oder algorithmisch nicht lösbar, sondern i. Allg.
schlichtweg nicht existent. Geht man vom Modell des endlichen
Automaten aus, ist die Umsetzung relativ leicht durchführbar, wenn
eine formale Beschreibung der Computerhardware vorliegt. Diese steckt
bspw. in jedem Rechnersimulationsprogramm drin.

*) Die Anzahl der Zustände ist allerdings so groß, dass die Turing-
Maschine ein handlicheres, wenn auch nicht 100%ig korrektes Modell
darstellt.

Genug theoretisiert. Ich wollte dir mit diesem Geschwätz eigentlich
nur sagen, dass die ausschließliche Verwendung von endlichen Automaten
i. Allg. nicht das geeignete Mittel ist, um komplexe C-Programme
übersichtlicher darzustellen. Man kann damit aber gewisse Teilaspekte
von Programmabläufen verdeutlichen. Andere Teilaspekte können bspw.
durch Klassendiagramme (bei objektorientierter Programmierung) oder
Sequenzdiagramme dargestellt werden.

Die Entscheidung, welche Aspekte mit welchen Mitteln beschrieben
werden, erfordert nach dem derzeitigen Stand der Technik jedoch den
Einsatz natürlicher Intelligenz, die manchmal durch geeignete Tools
(z. B. bei der Erstellung von Klassendiagrammen) unterstützt werden
kann.

Auch für die klassische Darstellung von Algorithmen mittels
Flussdiagrammen und Struktogrammen gibt es Tools, die sogar meist
vollautomatisch arbeiten. Da diesen Tools aber die Fähigkeit zur
Abstraktion fehlt, ist das Ergebnis meist wieder ein C-Programm, bei
dem um zusammenhängende Blöcke Kästchen gezeichnet werden und
Steuerkonstrukte wie Schleifen und Verzweigungen durch entsprechende
grafische Symbole ersetzt werden. Da diese Darstellunge bei komplexen
Algorithmen deutlich mehr Platz brauchen als ihr C-Äquivalent, ist
ihre Übersichtlichkeit aber meist schlechter als der ursprüngliche
C-Code.

Die beste Softwaredokumentation besteht meiner Meinung nach immer
noch aus gut kommentiertem Quellcode, einer Prosabeschreibung der
grundlegenden Ideen, die in dem Programm realisiert wurden, und
einigen manuell und mit Verstand angefertigten Bildchen (z. B.
Zustandsgraphen, Klassendiagramme, Sequenzdiagramme, Zeitdiagramme,
geometrische Skizzen, Regelkreisdiagramme oder was sonst eben so
passt), die Sachverhalte abstrahieren, d. h. wesentliche Dinge
darstellen und unwesentliche weglassen.

Autor: Ha Jo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klasse beschrieben finde ich. Und Deinem Fazit, Zitat: "Die beste 
Softwaredokumentation besteht meiner Meinung nach immer
noch aus gut kommentiertem Quellcode,......", stimme ich voll und ganz 
zu.

Bin sogar etwas erstaund, wie jemand, der so gut theorisieren kann, dann 
doch auf den Boden zurückfällt und praktisch gut verwendbare Gedanken 
hat ;-)
Ist mir selten passiert. Die meisten bleiben in Ihrer Theorie und wollen 
diese auch in die Praxis umsetzen, scheitern aber oft.

Nun ja, dann einen schönen Tag.

Joachim

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hat sich der OP auch falsch ausgedrueckt. Ist vielleicht ein 
Flussdiagramm vom Programm gemeint?

Für groessere Programme schnappe ich mir ein Blatt und erstelle das 
Flussdiagram auf Papier, weil doch des oefteren radiert werden muss.

Ein Programm welches direkt aus dem C-Syntax ein Flussdiagramm 
inpretiert kenne ich nicht, falls jemand einen Interpreter kennt wie 
werden Interrupts berücksichtig  (und nasty interrupts) ?




Autor: Schorsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der prozeduralen entwicklung kenne ich mich nicht aus (denke aber, 
dass es da schelcht aussieht), aber zur OOP gibt es tools die modelle 
(UML) und code verknüpfen und konsistent halten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.