mikrocontroller.net

Forum: Compiler & IDEs warten auf Rückgabewert


Autor: Helmi (Gast)
Datum:

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

Autor: yalu (Gast)
Datum:

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

Autor: Daniel (Gast)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
=> Schrittketten.

Autor: Helmi (Gast)
Datum:

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

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.