Hallo, ich möchte für mein Programm einen Ablaufplan zeichnen. Dabei befinde ich mich so lange in solange in einem Menü, bis ein externes Interrupt durch einen Schalter ausgelöst wird. Wie zeichne ich das dann? Nicht wie bei einem normalen if/else, also mit der Unterscheidung falls Taster gedrückt/ falls Taster nicht gedrückt?
Für jeden Interrupt zeichnet man ein eigenes Flussdiagramm. In den Hauptfluss kann man das nicht integrieren, da Interrupts ja asynchron dazu auftreten werden. Vielleicht möchtest du ja Datenflussdiagramme zeichnen...
Du brauchst einen getrennen Ablauf für jeden Interrupt. Ein PAP alleine, ohne Datenstrukturen, oder Synchronisation der Zugriffe auf gemeinsame Variablen, ist nicht sehr hilfreich.
Tja, da so ein Interrupt "immer" stattfinden kann, kann man den Code in der Interrupt-Service-Routine und als eigenständigen/ nebenläufigen Ablauf darstellen. Nur Taster lösen keinen Interrupt aus, denn sie Prellen und man benötigt ja nur ein Tastenereignis : Taster wurde gedrückt und Taster wurde losgelassen. Warum ? denke darüber man nach.
Tja, da so ein Interrupt "immer" stattfinden kann, kann man den Code in der Interrupt-Service-Routine und als eigenständigen/ nebenläufigen Ablauf darstellen. Nur Taster lösen keinen Interrupt aus, denn sie Prellen und man benötigt ja nur ein Tastenereignis : Taster wurde gedrückt und Taster wurde losgelassen. Warum ? denke darüber mal nach.
Die meisten gut funktionierenden Programme erfassen und entprellen Tastenbetätigungen in einem Interrupt und melden eindeutige Ereignisse durch ändern eines Registers, oder einer Speicherstelle. In den PAP des Hauptprogramms fügt man dann die Abfrage dieses Registers, oder der Speicherstelle ein.
Per Schalter einen Interrupt auslösen? Na hoffentlich ist dann auch an die Entprellung gedacht.
Wird doch auch nicht besser, weil der Schalter eben prellt. Dann löst man einen Timer-Interrupt mehrfach aus. Normalerweise kenne ich das so, daß man prellende Eingänge im ohnehin eingerichteten Timerinterrupt einliest, weil man da eine vernünftige Zeitbasis hat. Dann zählt man den Eingang rauf/runter (begrenzt auf 0 und MAX_COUNTER) und wertet mit ner Hysterese den Status aus. Das Ergebnis schiebt man dann entweder in eine Queue, wenn man auf Flankensteuerung aus ist und kein Ereignis verpassen will, oder in eine Variable, wenn nur der momentane konsolidierte Level interessiert. Oder natürlich man entprellt in Hardware, dann kann man auch direkt einen IO-getrigggerten Interrupt verwenden. Habe ich aber in der Praxis so gut wie nie gesehen, weil es zusätzliche oder aufwendigere Bauteile kostet.
@ämpl ämpl schrieb: > Hallo, > > ich möchte für mein Programm einen Ablaufplan zeichnen. Dabei befinde > ich mich so lange in solange in einem Menü, bis ein externes Interrupt > durch einen Schalter ausgelöst wird. > > Wie zeichne ich das dann? Nicht wie bei einem normalen if/else, also mit > der Unterscheidung falls Taster gedrückt/ falls Taster nicht gedrückt? Wäre das Beispiel in der Anlage das was Du suchst? Wenn ja, den kostenlosen Download des PAP-Designers gibt es hier: [http://friedrich-folkmann.de/papdesigner/Download.html] [https://de.wikipedia.org/wiki/Programmablaufplan] mfG Ottmar
Nop schrieb: > Wird doch auch nicht besser, weil der Schalter eben prellt. Dann löst > man einen Timer-Interrupt mehrfach aus. Du hast mich nicht verstanden. Nop schrieb: > Normalerweise kenne ich das so, daß man prellende Eingänge im ohnehin > eingerichteten Timerinterrupt einliest, weil man da eine vernünftige > Zeitbasis hat. Ja, so wird da ein Schuh draus.
Karl M. schrieb: > kann man den Code in der > Interrupt-Service-Routine und als eigenständigen/ nebenläufigen Ablauf > darstellen. In meinem Interrupt wird nur ein Flag gesetzt, also würde das bei mir wahrscheinlich eher keinen Sinn machen. Ich habe zwar nur einen Code von 1000 Zeilen, allerdings fällt es mir schwierig alles in ein PAP zu packen (würde wahrscheinlich viel zu groß werden). Ist es eine geläufige Alternative anstatt eines PAP einen Zustandsautomaten zu zeichnen, um den Programmablauf zu erklären? Dann hätte ich nämlich die Zustände: Initialisieren, Menü, Programm 1 und Programm 2. Mit den Tastern wechsel ich dann zwischen dem Menü und den Programmen. Durch die Taster (entprellt) werden dann Interrupts ausgelöst in denen ein Flag gesetzt wird und danach ausgewertet wird. Daher würde ich "einfach Pfeile" zwischen den einzelnen Zuständen zeichnen. Und in die einzelnen Zustände schreibe ich dann die Aktivitäten die durchgeführt werden (z.B. LED anschalten, etwas auf Display schreiben, usw.).
ämpl schrieb: > Ich habe zwar nur einen Code von 1000 Zeilen, allerdings fällt es mir > schwierig alles in ein PAP zu packen Macht man auch nicht. Man teilt sein Programm in Unterfuntionen auf und diese erhalten dann ihren eigenen PAP. https://de.wikipedia.org/wiki/Teile_und_herrsche_%28Informatik%29
ämpl schrieb: > Ist es eine geläufige Alternative anstatt eines PAP einen > Zustandsautomaten zu zeichnen, um den Programmablauf zu erklären? Wenn es dein Ziel ist, das Programm jemand anderem (oder auch dir selbst) zu erklären, und das in einer anderen Form besser geht, dann solltest du diese auch benutzen.
Kann es sein, dass ämpl gar keinen alternativen Vorschlag haben möchte und vielmehr nur die Zustimmung zu seinem aufgezeigten Weg haben möchte? mfg GroberKlotz
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.