-         
Ergebnis 1 bis 9 von 9

Thema: Zwei Schleifen gleichzeitig laufen lassen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.03.2005
    Beiträge
    47

    Zwei Schleifen gleichzeitig laufen lassen

    Anzeige

    Hallo

    Ich programmier von Zeit zu Zeit immer mal so kleine Programme für den RN-Control. Meistens erreiche ich auch mein Ziel. Nun wollte ich aber mal wissen, ob man irgendwie zwei Schleifen gleichzeitig laufen lassen kann? Zum Beispiel so:

    1. Eine Schleife die für den Countdown auf dem Display zuständig ist
    und gleichzeitig läuft noch eine Schleife
    2. die so lange läuft, bis ein Port = 1 ist.

    Ist sowas möglich oder muss man da irgendwie eine große Schleife bauen?

    Gruß Hendrik

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Das ist nicht möglich. Da bräuchtest du einen multitasking fähigen µC. Und das sind die AVRs nicht. Da müsstest du einen Propeller-Chip verwenden.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    41
    Beiträge
    685
    Moin!
    Ich denke mal, dafür wären Interrupts gut, für den Timer z.B. einen (welch Überaschung) Timerinterrupt, und den Taster evtl. an einen Interruptfähigen Pin anschließen.
    MfG
    Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Das würde gehen, wenn nur eine Schleife laufen würde, die bei einem Interrupt unterbrochen wird.
    Zwei Schleifen nebeneinander gehen bei einem AVR nicht.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.02.2006
    Alter
    48
    Beiträge
    781
    Das könnte man beispielsweise über ein Hauptprogramm und einen Timer regeln. Der Timerinterrupt bringt den µC in's Hauptprogramm, das entscheidet dann welche Schleife aufgerufen wird. Das kann z.B. immer abwechselnd passieren, z.B. alle 1ms wechseln.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    25.03.2005
    Beiträge
    47
    Mit den zwei Schleifen sollte jetzt auch nur ein Beispiel sein. Ein anderes Beispiel wär z.B. das man bei einem Auto die eine Schleife die Geschwindigkeit errechnen lässt un die andere Schleife den Verbrauch und vielleicht eine dritte für die Menüführung. (Anzeigen aller Daten)
    Naja, hatte jetzt nichts konkretes vor zu programmieren, nur ist mir die Frage irgendwie immer wieder hoch gekommen, weil man dann wohl so einiges leichter programmieren könnte.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Echt parallel geht das nicht. Aber das ist bei den meisten Prozessoren und Controllern nicht möglich.
    Braucht es in der Regel ja auch gar nicht.
    Normalerweise reagiert dein Programm auf Einflüsse von außen, wie z.B. ein Geber, der in Abhängigkeit von der Geschwindigkeit eine größer werdende Spannung ausgibt. Außerdem ist da noch ein Verbrauchssensor, der den Spritverbrauch durch Impulse überträgt.
    Wenn du in deinem Programm die beiden über den ADC und Portabfrage einliest, die Werte umrechnest und dann auf dem Display darstellt, merkst du doch überhaupt nicht, ob die nun parallel oder nacheinander berechnet wurden. Hauptsache, es geht schnell genug.
    Die Ausgabe der z.B. 3-stelligen Geschwindigkeit passiert auch nicht gleichzeitig, sondern eine Ziffer nach der anderen.
    Und nebenbei kannst du dann auch noch auf eine Taste drücken, um damit die angezeigten Daten bzw. das Menu umzuschalten.
    Evtl. willst du unmittelbar auf einen Zustandswechsel an einem Port reagieren, dann benutzt du einen externen Interrupt. Oder du willst nach einem bestimmten Zeitintervall eine Aktion durchführen, dann braucht es einen Timer.
    Das alles läuft so quasi-parallel ab, dass du das Nacheinander wahrscheinlich nicht bemerken kannst.
    Und wenn du jede Aufgabe sauber in separate Funktionen oder Subs aufteilst, dann lässt sich dies auch einfach programmieren. Nur gibt es häufig Abhängigkeiten zwischen den Blöcken, so dass sich die Trennung nicht so strickt durchführen lässt.

    Gruß

    Rolf

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Ort
    München
    Alter
    33
    Beiträge
    32
    Und vielleicht kannst du durch eine geeignete Kombination der Schleifenbedingungen die beiden Schleifen zu einer zusammenfassen. (Ich kenn jetzt die Details deines Codes nicht, aber prinzipiell is das glaub ich schon möglich)

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    irgenwie hatte er ja recht:


    Zitat Zitat von vklaffehn
    Moin!
    Ich denke mal, dafür wären Interrupts gut, für den Timer z.B. einen (welch Überaschung) Timerinterrupt, und den Taster evtl. an einen Interruptfähigen Pin anschließen.
    MfG
    Volker
    wenn man so die erste frage von hendrik87 betrachtet. ...

    >>> auch jon hat recht: " zwei schleifen gehen nicht !"

    es sei denn, die eine läuft innerhalb der anderen.


    wenn man jedoch die zweite fragestellung von hendrik87 betrachtet..

    ich quote mal:

    Mit den zwei Schleifen sollte jetzt auch nur ein Beispiel sein. Ein anderes Beispiel wär z.B. das man bei einem Auto die eine Schleife die Geschwindigkeit errechnen lässt un die andere Schleife den Verbrauch und vielleicht eine dritte für die Menüführung. (Anzeigen aller Daten)
    Naja, hatte jetzt nichts konkretes vor zu programmieren, nur ist mir die Frage irgendwie immer wieder hoch gekommen, weil man dann wohl so einiges leichter programmieren könnte.

    käme ich eher zu dem schluss, dass hendrik87 zuviel schleifen im kopf hat.

    eine ideale schleife ist eine wie folgt:

    DO
    LOOP

    es passiert einfach nix.

    dann kommen die int routinen:

    die erste über timer (sagen wir mal 1 int je sekunde)
    >>> wenn der mikro mit 1mhz getaktet ist und jeder befehl nur 1 takt wäre, würde er also 1.000.000 mal das "do loop " durchlaufen und dann einmal in die int-routine fallen. da ich nicht genau weiss, was bascon wann macht, kürzen wir die 1.000.000 einfach mal ganz sicher durch 1000.

    selbst dann wird der mikro noch 1000mal je sekunde nichts machen ... also durch do... loop laufen.

    jetzt nehmen wir in der int-routine die messwerte des benzinverbrauchs-sensors und die der geschwindigkeit.


    um die werte sinnvoll zu machen, nehmen wir das mindestens 10 mal und bilden den mittelwert.



    ein zweiter int bringt uns dann alle 12 sekunden auf die routine zur ausgabe auf das display.


    so in etwa muss sowas laufen.


    gruss klaus

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •