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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.