Pattern für Eingabe verarbeitung?

Gast #2116743
Lesenswert?

Hallo,

ich hab folgendes Problem.

Ein Programm beispiel:
1
void dosomethinglong()
2
{
3
.....
4
}
5

6
int main()
7
{
8
uint8_t i;
9
while(1){
10
i=keypressed(pinadressexy);
11

12
if(i)
13
{
14
 reagiere_auf_die_eingabe();
15
}
16
doseomthinglong();
17
}
18
}

Jedoch zeigt sich hier das problem, dass wenn er in der dosomethinlong() 
methode ist ja nicht auf die eingabe reagieren kann und dort einfach 
weiter macht.

Gibt es die möglichkeit durch einen Interrupt die ausführung von 
dosomethinglong() zu unterbrechen und direkt auf eine eingabe zu 
reagieren?

oder müsste ich da einen Timer neben her laufen lassen?

Wie funktioniert die Steuerung z.b. für ein Videospiel?
Gast #2117424
Lesenswert?

JVogel schrieb:
> Gibt es die möglichkeit durch einen Interrupt die ausführung von
> dosomethinglong() zu unterbrechen und direkt auf eine eingabe zu
> reagieren?

Dafür wurden Interrupts schließlich erfunden.

Also ja, mit Multitasking oder der Behandlung der Eingabe komplett im 
Interrupt. Beides nur, wenn dosomethinglong() mit längeren 
Unterbrechungen kein Problem hat.

Ansonsten muss dosomethinglong() in kleineren Häppchen abgearbeitet 
werden.

JVogel schrieb:
> oder müsste ich da einen Timer neben her laufen lassen?

Wenn die Eingabe (etwa der Tastendruck) selbst keinen Interrupt auslöst, 
muss halt in einem Timer-Interrupt die Eingabe regelmäßig abgefragt 
werden.

JVogel schrieb:
> Wie funktioniert die Steuerung z.b. für ein Videospiel?

Kommt aufs Spiel an, aber ein wenig lässt sich verallgemeinern, dass die 
ja meistens durch die Videoausgabe einen vorgegebenen Takt haben. So 
laufen viele Zyklen pro Sekunde und es macht keinen Sinn, die Eingaben 
öfter als jeweils vor der Berechnung des nächsten Bildes zu verarbeiten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren