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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.