Das Problem bei der µC-Programmierung ist ja, daß man dort kein
Multitasking-OS hat.
D.h. wenn man irgendwo auf etwas wartet, dann wird dort auch echte
CPU-Zeit vernichtet und kein anderer Prozeß kann was machen.
Die Lösung ist daher, alle Funktionen abweisend zu programmieren.
Also nicht: warte bis das Ereignis eintritt.
sondern: solange das Ereignis noch nicht eingetreten ist, gehe zurück
zur Mainloop.
Wenn man so programmiert, gibt es plötzlich gar keine derartigen
Probleme mehr.
Man hat dann einfach entsprechende Routinen, die erst dann
weitermachen, wenn das gewünschte Ereignis eingetreten ist.
Und solange keines der Ereignissse eintritt, ruft die Mainloop sie
ständig hintereinander auf.
Im Prinzip ist das Polling und man kann so auf beliebig viele
Ereignisse pollen.
Ist das Ereignis eine Zeit, die ablaufen soll, nimmt man dafür einen
Timerinterrupt (z.B. 1ms), der dann die Zeitvariable runterzählt bis
sie auf 0 ist, d.h. es sind auch beliebig viele Zeitvariablen möglich.
Wichtig ist nur, daß man es konsequent macht, d.h. auch wirklich an
jeder Wartestelle, damit nirgendwo die CPU verhungern kann.
Hat eine Funktion mehrere Wartestellen, läßt man einfach ein Zählbyte
mitlaufen, damit dann beim nächsten Durchlauf genau an die richtige
Wartestelle verzweigt werden kann. In C gibts für Verzweigungen z.B.
die switch-Anweisung.
Peter