Hallo m.a.r.v.i.n
ich habe Deine Anregungen ausprobiert, leider ohne Erfolg.
An dem Bild weiter unten siehst Du noch einmal genau, was da nicht klappt.
1. Der Asuro wartet auf einen Tastendruck und sendet jede Sekunde den String "Taste?" (Zeile 16-19).
2. Beim Drücken einer Taste wird die globale Variable switched auf Null gesetzt (Zeile 20).
3. Der Bitwert des entsprechenden Tasters (in diesem Beispiel 16) wird zusammen mit dem Wert switched ( jetzt wieder 0) ausgegeben. Im Terminalfenster erscheint die Zahlenkombination 16 und 0.
4. Jetzt sollte das Programm eigentlich wieder auf einen neuen Tastendruck warten und die Schritte 1-3 wiederholen. Das passiert aber nicht, sondern der Interrupt wird sofort und ohne Tastendruck erneut ausgelöst. Dies erkennt man daran, dass nun im Terminalfenster die Zahlenkombination 0 und 0 erscheint. Die globale Variable switched muss dazu zuvor erneut auf 1 gesetzt worden sein - und zwar durch Aufrufen der ISR SIGNAL (SIG_INTERRUPT1). Da dies nicht durch einen Tastendruck passiert ist, geschieht dies intern im Prozessor.
Mein Fazit: Das permanente Aufrufen der ISR SIGNAL (SIG_INTERRUPT1) muss irgendwie intern im Prozessor durch ein Register-Bit gestoppt werden. Das Abändern der globalen Variablen switched ist ohne Probleme möglich, führt aber nicht zum Erfolg.
Lesezeichen