-         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: "Multitasking" beim RP6

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2010
    Ort
    Hausten
    Alter
    21
    Beiträge
    11

    "Multitasking" beim RP6

    Anzeige

    Hallo,

    ist es irgend wie möglich zwei Funktionen parallel Laufen zu lassen beim RP6?
    Ich will nämlich den RP6 dem Licht verfolgen lassen wenn ich das den so mache:

    Code:
    	    if(LichtsensorLinks > LichtsensorRechts)
    	    {
    		    setRP6LEDs(0b001000);
    	            moveAtSpeed(25,75);
    	    }
                else
    	    {
    	       setRP6LEDs(0b010000);
    	        moveAtSpeed(75,25);
    	    }
            mSleep(100);
    Das alles in einer while(1) schleife.

    Das Problem ist das wenn ich da Licht drauf Scheine lasse geht er IMMER nach Rechts....

    Gruß Niklas
    .................................................. ...................................

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    if(LichtsensorLinks > LichtsensorLinks) kann auch NIE ein true zurückgeben!
    if(LichtsensorLinks > LichtsensorRechts) würde ich mal versuchen

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2010
    Ort
    Hausten
    Alter
    21
    Beiträge
    11
    Sorry war ein tip Fehler
    .................................................. ...................................

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Ja, gehts denn jetzt?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2010
    Ort
    Hausten
    Alter
    21
    Beiträge
    11
    Nein ich hab das nicht direkt kopiert sondern hier geschrieben
    .................................................. ...................................

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    28
    Beiträge
    587
    Es gibt verschiedene Sorten von Mutlitasking oder Scheudling, kann von ganz einfach bis hochkompliziert gehen. Ich hatte mal einen real-time-task-caller geschrieben. Das Ding hatte ziemlich viel Management-overhead und war einer der einfacheren Versionen... (10% gingen typisch nur fürs Tasken drauf! Wenn du nur LED-Blinken machst 99%) Glaub mir, das ist hier viel zu kompliziert...

    Vorschlag: Poste doch mal deinen gesammten Code und sag uns konkret was Du vor hast, und wir schaun' wie wir dir helfen können...

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Echtes Mutlitasking gibt es quasi nicht da jeder Prozessor seinen Programmierende sequentiell abarbeitet (muss). Mann kann mittels z.B. Hardware IRQ Timergesteuert zwischen Task umschalten wenn man vorher den IRQ Vektor auf den neuen Task "verbiegt" und natürlich irgendwann wieder die Hauptroutine anspringt.

    Außen natürlich mehr Prozessor Systeme wie z.B. der "Propeller Chip" der hat mehrere Kerne welche gleichzeitig arbeiten können. Aber auch dort wird sequentiell entschieden wer jetzt gerade "Dran ist"......

    Tatsächlich entscheidet die Taktfrequenz was (wir Menschen) als "gleichzeitig" Empfinden.

    Dein Problem mit der Linie ist allerdings ein Software problem, Die Linienabfrage muss nur "Zwischendurch" per Timer IRQ alle paar ms aus dem Hauptprogramm aufgerufen werden und im Hauptprogramm dann ausgewertet und reagiert werden.

    Gruuß Richard

    Gruß Richard

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.789
    Blog-Einträge
    8
    Hallo

    Echtes Multitasking kann der RP6 natürlich auch nicht. Aber er hat ein pfiffiges und leistungsstarkes Task-System mit dem er alle anfallenden Aufgaben wie Motoransteuerung, Sensorauswertung, ACS oder Kommunikation so geschickt mischt, dass es für den Programmierer multitaskingähnlich erscheint. Wichtig bei der Programmierung ist es deshalb, die eigenen Funktionen so einzubauen, dass sie mit dem Tasksystem harmonieren und es nicht blockieren.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von radbruch
    Hallo

    Echtes Multitasking kann der RP6 natürlich auch nicht. Aber er hat ein pfiffiges und leistungsstarkes Task-System mit dem er alle anfallenden Aufgaben wie Motoransteuerung, Sensorauswertung, ACS oder Kommunikation so geschickt mischt, dass es für den Programmierer multitaskingähnlich erscheint. Wichtig bei der Programmierung ist es deshalb, die eigenen Funktionen so einzubauen, dass sie mit dem Tasksystem harmonieren und es nicht blockieren.

    Gruß mic
    Wenn ich mich richtig erinnere hatte das auch der gute alte c64 über Hartware IRQ gemacht der nicht unterbrochen werden konnte...Also quasi Programm und BS in getrennten Task`s
    ausgeführt.

    Gruß Richard

  10. #10
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.996
    Haloo!

    So wie schon meine Vorreder geschrieben haben, ist echtes Multitasking nur mit mehr (Core)Prozessoren möglich.

    Sonst gibt es nur Quasi-Multitasking, das kann auf zwei Weisen realisiert werden:

    1. Alle Tasks werden in fester bzw. per Interrupts bestimmter Reihenfolge auf Bedarf geprüft und nur die mit gesetztem Flag werden vollständig bis zum Ende realisiert. Es kann natürlich mit Proritäten versehen werden.

    2. Der s.g. Taskmanager gibt jedem Task feste Zeit und wenn der Task aktiv ist, wird er nach dieser Zeit unterbrochen und nächster Tast gestartet. Wenn die Zeit für unterbrochener Zeit wieder kommt, wird er ab unterbrochener Stelle wieder in ihn zustehender Zeit ausgeführt, wieder unterbrochen u.s.w. Bei dieser Methode bei kurzen Laufzeiten für jeden Task, sieht der Beobachter praktisch keine Unterbrechungen von Tasks. Auch hier können Prioritäten benutzt werden, aber z.B. Zeiten für Warteschleifen können nicht genau berechnet werden.

    Ich kenne das Programm von RP6 leider nicht und deshalb kann ich nicht sagen, welche Variante vom Quasi-Multitasking dort verwendet wurde, was am wichtigsten ist, um eigene Tasks richtig in das System implementieren zu können.

    MfG

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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