2016-07-01 3 views
0

Ich habe Erfahrung mit mehreren RTOS (pSOS, VxWorks, QNX), aber ich bin neu bei MicroC/OS II (ucos ii). Ich sehe, dass etwas Einzigartiges an ucos ii ist, anstatt eine eindeutige ID für Aufgaben zu haben, die die Priorität zur eindeutigen Identifizierung von Aufgaben verwendet und dass alle Aufgaben unterschiedliche Prioritäten haben müssen und somit die Round-Robin-Planung nicht unterstützt wird. So viel verstehe ich. Hier ist die Frage:Änderung der Priorität in MicroC/OS II (ucos ii) ändert Task ID?

Wenn ich die Priorität einer Aufgabe mit OSTaskChangePrio() ändern, verursacht das nicht Probleme für Code oder andere Aufgaben, die die Priorität (Task-ID) der Aufgabe gespeichert hatte, die gerade ihre Priorität geändert. Die Änderung der Priorität ändert die Identität der Aufgabe. Wie ist das kein Problem?

Antwort

0

Diese Funktion prüft, ob eine Aufgabe mit der angeforderten Priorität/ID bereits existiert und gibt dann einen Fehler zurück. Wenn Sie also die Priorität Ihrer Aufgabe ändern möchten, müssen Sie den entsprechenden Platz in der Aufgaben-Tabelle belassen. ucosii kann bis zu 255 Aufgaben verwalten, aber Sie müssen in jedem Projekt den Wert OS_LOWEST_PRIO angeben. Auf diese Weise begrenzen Sie die Menge der verfügbaren Aufgaben. ucosii ist nicht wie psos oder vxworks - es ist eher wie Nukleus oder threadx - sehr dünnes OS.

0

Sie möchten die Priorität Ihrer Tasks nicht ändern, es sei denn, Sie implementieren einen dynamischen Scheduling-Algorithmus oder einen Algorithmus für die Ressourcenzuweisung für Ihr RTOS. In solchen Fällen interessiert die Identität der Aufgabe nicht als Priorität. Es würde nur darauf ankommen, welche Aufgabe in diesem Moment aufgrund von Faktoren wie dem Termin der Aufgabe ausgeführt werden muss.

Sie haben Recht. Wenn Sie OSTaskChangePrio verwenden, können Sie Tasks nicht mehr nur anhand der Taskpriorität identifizieren.

+0

Nur ein Beispiel, ich möchte die Aufgabe haben, die andere Aufgaben startet, reduzieren ihre Priorität, wenn es fertig ist. Wenn einer Aufgabe erlaubt wird, ihre Aufgaben-ID effektiv zu ändern, kann ich mich nicht darauf verlassen, diese zu verwenden, um die Aufgabe zu identifizieren. Ich fand es auch unklar, wenn Ucos ii Prioritätsinversion tut, ändert es tatsächlich die Aufgaben-ID (Priorität), wie von anderen Aufgaben gesehen. Das heißt, wenn ich versuche, die ursprüngliche Task-ID (Priorität) zu verwenden, während die Prioritätsumkehrung auftritt, um diese Task zu identifizieren, schlägt der OS-Aufruf fehl, weil keine Task diese Task-ID (Priorität) in diesem Moment hat? – JonN

Verwandte Themen