Benulba schrieb:
> Ich frage den Flankenwechsel nun über while-Schleifen ab.
Und um da mal ganz konkret zu werden:
Genau da liegt dein Problem.
Hier
> while(!(taster_stop==1))
> {
> das Problem, dass die Abfragen nur nacheinander ausgeführt werden und
> nicht gleichzeitig.
Genau gleichzeitig muss auch nicht sein. Ein paar Nanosekunden Differenz
tun keinem weh.
> Hat jemand einen Vorschlag, wie ich das ändern könnte?
Das Problem ist, dass du deine Denkweise ändern musst.
Du musst weg von der Denkweise
mache solange wie, und danach machst du dieses und jenes
hin zu einer
ereignisgesteuerten Sichtweise.
(Eine Statemaschine ist auch nichts anderes als eine ereignisgesteuerte
Sichtweise, nur eben in einer Orgtanisationsform, die sich bewährt hat)
Was ist eine Ereignisgesteuerte Sichweise? Es ist genau das, was wir
tagtäglich im realen Leben machen. Keine Hausfrau stellt sich eine halbe
Stunde an den Herd und bleibt dabei stehen um dem Wasser beim Kochen
zuzusehen nur um dann, wenn sie mit Kochen fertig ist, sich 2 Stunden
zur Waschmaschine zu setzen um der Trommel beim Drehen zuzusehen.
Wie machen wir solche Dinge im realen Leben 'gleichzeitig'?
Wir machen das, indem wir nicht auf die Beendigung der Vorgänge warten
sondern ständig von einem Vorgang zum nächsten 'hüpfen'. Dort sehen wir
uns die Sache an, entscheiden ob es etwas zu tun gibt und wenn ja dann
wird das gemacht. Weiter gehts zum nächsten Vorgang.
while( 1 ) { // Hauptschleife
blick zum Herd - ist er eingeschaltet?
Nein - schalte ihn ein
Ja - kocht das Wasser?
Ja - gib die Nudeln rein
Nein - keine Aktion notwendig
Blick zur Waschmaschine - ist die eingeschaltet
Nein - einschalten
Ja - Ist Waschmittel drinnen?
Ja - Wäsche drinnen?
Programm auswählen und starten
Nein - gib die Wäsche hinein
Ist das Programm fertig durchgelaufen?
Nein - keine Aktion notwendig
Ja - hole die Wäsche heraus
Blick zum Baby - schläft es?
Ja - atmet es noch?
Ja - keine Aktion notwendig
Nein - Notarzt anrufen
Nein - schreit es?
Ja - Schnuller geben
Nein - spielt es?
Ja - keine Aktion notwendig
Nein - Spielzeug geben
}
und so geht das immer Reihum. Bei jedem Durchgang wird ein mögliches
Ereignis nach dem anderen geprüft und je nachdem auf das Ereignis
reagiert. Aber: nirgends wird gewartet. Es wird weder darauf gewartet,
dass das Nudelwasser kocht noch dass die Waschmaschine fertig ist.
Und so schaffen wir es 3 Dinge mehr oder weniger gleichzeitig zu tun.
Wobei dein µC da noch viel besser drann ist, weil er nicht dauernd hin
und herrennen muss und ausserdem die 'Checkliste' viele Tausend mal in
der Sekunde abarbeiten kann.