Forum: Compiler & IDEs Pattern für Eingabe verarbeitung?


von JVogel (Gast)


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?

von Andreas B. (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andreas B. schrieb:

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

Wobei man mechanische Tasten typischerweise sowieso innerhalb eines
Timerinterrupts abfragt, weil man dort dann auch die Entprellung
platziert.

von jvogel (Gast)


Lesenswert?

Ok, vielen Dank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.