mikrocontroller.net

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


Autor: JVogel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab folgendes Problem.

Ein Programm beispiel:

void dosomethinglong()
{
.....
}

int main()
{
uint8_t i;
while(1){
i=keypressed(pinadressexy);

if(i)
{
 reagiere_auf_die_eingabe();
}
doseomthinglong();
}
}

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?

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jvogel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, vielen Dank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.