Forum: Compiler & IDEs warten auf Rückgabewert


von Helmi (Gast)


Lesenswert?

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

von yalu (Gast)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

=> Schrittketten.

von Helmi (Gast)


Lesenswert?

Stimmt natürlich, kann es auch direkt dort ausführen..

Hab wohl den Wald vor lauter Bäumen nicht mehr gesehn, danke für die 
Hilfe.

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.