warten auf Rückgabewert

Gast #936376
Hallo,

ich habe folgendes Problem zu dem mir einfach keine Lösung einfallen 
will:

Ich habe in meinem Programm eine Endlosschleife laufen, diese arbeitet 
zyklisch Methoden ab wenn die dazugehörigen Flags gesetzt sind.

Über Interrupts werden verschiedene Methoden gestartet, die jeweils ihre 
Flag setzen und dann darauf warten sollen, dass die Endlosschleife die 
dazugehörige Methode abarbeitet.

also im Prinzip:

int a;

interrupt1()
{
  methode1();
}

while(1){
  if(flag1){
    a=rechnung();
  }
}

methode1(){
   flag1=1;
   .....
   return a;
}

Das Problem ist folgendes: Woher weiss ich das der Wert in der 
Endlosschleife berechnet wurde? Ich müsste ja so lange warten (da wo die 
Punkte sind), ich habe allerdings keine Ahnung wie ich das machen soll 
ohne die Ausführung der while-Schleife zu behindern. Vielleicht mach ich 
das auch alles grad viel zu kompliziert als es ist und hab in dem Fall 
nur noch Tunnelblick....

Hoffe jemand hat eine Idee,

Helmi
Gast
Warum willst du in der Interruptroutine auf etwas warten, was im
Hauptprogramm (also in der While-Schleife) passiert? Das gibt
garantiert einen Deadlock, weil die Interruptroutine die Ausführung
des Hauptprogramms blockiert und sie deswegen ewig warten müsste.

Was immer die Interruptroutine mit dem Ergebnis a der Berechnung im
Hauptprogramm tun würde, kann doch auch im Hauptprogramm nach der
Zeile "a=rechnung()" erfolgen. Die Interruptroutine setzt also nur
noch das Flag, was sehr schnell geht, und behindert damit den Ablauf
im Hauptprogramm kaum.
Gast
ich sehe das wie yalu.
Du hast 2 Möglichkeiten
- in der Interruptroutine die Berechnung zu machen
mit der Gefahr, dass es eventuell zu lange dauert

- in ISR flag setzen
Berechnung aus der while starten und was sich
aus der Berechnung ergibt auch gleich ausführen.
Also das was du in der ISR danach ausführen wolltest.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.