if(LichtsensorLinks > LichtsensorLinks) kann auch NIE ein true zurückgeben!
if(LichtsensorLinks > LichtsensorRechts) würde ich mal versuchen![]()
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:
Das alles in einer while(1) schleife.Code:if(LichtsensorLinks > LichtsensorRechts) { setRP6LEDs(0b001000); moveAtSpeed(25,75); } else { setRP6LEDs(0b010000); moveAtSpeed(75,25); } mSleep(100);
Das Problem ist das wenn ich da Licht drauf Scheine lasse geht er IMMER nach Rechts....
Gruß Niklas
.................................................. ...................................
if(LichtsensorLinks > LichtsensorLinks) kann auch NIE ein true zurückgeben!
if(LichtsensorLinks > LichtsensorRechts) würde ich mal versuchen![]()
Sorry war ein tip Fehler
.................................................. ...................................
Ja, gehts denn jetzt?
Nein ich hab das nicht direkt kopiert sondern hier geschrieben
.................................................. ...................................
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...
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
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
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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`sZitat von radbruch
ausgeführt.
Gruß Richard
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
Lesezeichen