PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Multitasking" beim RP6



linknik
16.12.2010, 14:35
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:



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

TobiKa
16.12.2010, 14:39
if(LichtsensorLinks > LichtsensorLinks) kann auch NIE ein true zurückgeben!
if(LichtsensorLinks > LichtsensorRechts) würde ich mal versuchen ;)

linknik
16.12.2010, 14:43
Sorry war ein tip Fehler

TobiKa
16.12.2010, 14:46
Ja, gehts denn jetzt?

linknik
16.12.2010, 14:53
Nein ich hab das nicht direkt kopiert sondern hier geschrieben

s.o.
16.12.2010, 18:33
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...

Richard
16.12.2010, 19:45
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

radbruch
16.12.2010, 20:09
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

Richard
16.12.2010, 21:30
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

PICture
17.12.2010, 08:43
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

radbruch
17.12.2010, 09:12
Beim RP6 wird das erste Verfahren angewendet. Bei festen Tasklängen könnten zeitkritische Tasks wie ACS oder Serielle Kommunikation zur Unzeit abgebrochen werden, wenn der Task seinen Zeitanteil verbraucht hat.

Besserwessi
17.12.2010, 09:31
Multitasking könnte man machen, verurschte aber relativ viel Overhead und ist aber bei kleinen µCs eher unüblich. Besser ist es oft mit Interrupts zu arbeiten und da die Aufgaben passend zu verteilen - da muss man beim Programmieren vielleicht etwas mehr nachdenken, weil man keine gleichberechtigten Tasks hat, sondern verschiedene Interruptsroutinen.
Gerade für die Reaktion auf Sensoren sind Interrupts oft gut geeignet.

linknik
25.12.2010, 17:01
Danke für die Antworten.....

Werde mal paar Sachen versuchen.
Ich habe noch ein Problem vielleicht könnt ihr in diesem Theard RP6 Lightsensor Problem weiterhelfen.

Gruß Niklas

lokirobotics
18.04.2011, 08:01
Der Thread ist zwar schon vier Monate alt, aber was hier über Multitasking geschrieben wurde, möchte ich nicht so stehen lassen.
Natürlich kann man auf einem Prozessor ECHTES Multitasking machen.
Multitasking bezeichnet die nebenläufige Ausführung von Tasks auf einer Maschine.
Die Nebenläufigkeit ist gegeben, da mehrere Tasks, auch wenn sie gerade keine Rechenzeit bekommen, "aktiv" sein können.
Gleichzeitig wird das ganze dann, wenn man mit entsprechnder zeitlicher Auflösung auf das System schaut.
Beispiel Motorsteuerung: Zwei Tasks, Drehzahl erfassen, Motor-PWM stellen.
Jeder Task benötigt 1ms Rechenzeit. Die kleinste Zeiteinheit, die der Motor "sehen" kann (aufgrund seiner Trägheit) sei meinetwegen 10ms.
Aus Sicht des Motors wurden in einer Zeiteinheit zwei Tasks ausgeführt, d.h. also gleichzeitig. Und das ist alles, worauf es ankommt.

Wirkliche Ausführung: nebenläufig.
Darstellung für "langsame" Systeme (Mensch, Mechanik,...): gleichzeitig.

MfG

PICture
18.04.2011, 12:22
Hallo!

Das stimmt, wenn man es von der Anwendung aus betrachtet.

Ich be2fle nicht das "echtes" für 1ne Anwendung mit "qausi" Multitasking im sie steuernden Rechner möglich ist ... :)

Sonst könnte nur 1 µC im PLL Radio nicht "gleichzeitig" eingestellte Frequenz stabil halten und sie auf LC Diplay darstellen. Dabei laufen noch "gleichzeitig" z.B. eine Uhr, "Sleeptimer" und ...

lokirobotics
18.04.2011, 12:43
Wie gesagt, Multitasking sagt nichts über Gleichzeitigkeit, nur über Nebenläufigkeit. Also auch kein quasi Multitasking...
Gleichzeitigkeit fällt in den Bereich "parallel computing" => Multiprozessorsysteme...

PICture
18.04.2011, 12:58
Des1/2 wird der Begriff "Multitasking" für mich, bei Anwendung, immer doppelte Bedeutung haben. :(

Dagegen beim Computern ist es für mich, wie du geschrieben hast, 1deutig.

Aus o.g. Gründen ist für mich Gleichzeitigkeit ("real time computing" ? bzw. "parallel computing") und Multitasking nicht das Gleiche. :)

Übrigens, der Unterschied ist bei optimaler Entwicklung der Anwendung für Bediener unmerkbar.

lokirobotics
18.04.2011, 13:28
Aus o.g. Gründen ist für mich Gleichzeitigkeit ("real time computing" ? bzw. "parallel computing") und Multitasking nicht das Gleiche. :)

Das ist ja genau das, was ich gesagt habe... Oo

PICture
18.04.2011, 13:51
Danke und sorry, aber wegen meinen ziemlich strapazierten Hirn bin ich nicht mehr so flott, wie du ... :D

lokirobotics
18.04.2011, 13:59
:D Kein Problem! Ich freu mich, wenn wir uns einig sind.

MfG