Hallo Zusammmen,
irgendwie komme bei folgendem Problem ich nicht weiter:
Ich habe eine LED Lauflichtsteuerung. Die basiert auf vielen
Unterprogrammmen, die jeweils ein Muster erzeugen und jeweils zwischen
10 Sekunden und 10 Minuten laufen.
Jetzt habe ich Interruptgesteuert per Infrarot eine Empfangsroutine, die
einen RC5-Code empfängt. Der Code soll gleich die Programmnummer sein.
In der Main sähe das dann so aus:
1 | while(1){
|
2 | if (prog == 1){
|
3 | snake();
|
4 | }
|
5 | if (prog == 2){
|
6 | schach();
|
7 | }
|
8 | if (prog == 3){
|
9 | laufschrift();
|
10 | }
|
11 | }
|
Mein Problem: Die IRQ speichert nach Empfang eines Codes diesen in
"prog", aber das aktuelle Programm läuft ja noch.
Wie stelle ich es jetzt elegant an, dass die Unterprogramme abgebrochen
werden, wenn ein neuer Code empffangen wurde?
Zur Zeit habe ich das wie folgt gelöst: Jedes Unterprogramm ruft immer
die selben Funktionen (Delay und Framebuffer-Ausgabe) auf. Im Moment
habe ich diese beiden Funktionen so gepatcht, dass Delay nach einem
empfangenen Zeichen kein Delay macht und die Ausgabefunktion keine
Ausgabe macht, aber die Unterprogramme laufen noch komplett durch, nur
schneller.
Das muss doch irgendwie eleganter gehen, oder?
Hat hier jemand einen Tip für mich?