0

Gemäß der FreeRTOS-Taskplanungsdokumentation kann der Kernel eine Task austauschen, selbst wenn die Task gerade ausgeführt wird und keine blockierende Funktion aufgerufen hat. Sobald der Kernel also die Uhr mit dem Interrupt tickt und seinen ISR ausführt, kann er eine weitere Task planen, die danach ausgeführt wird.FreeSTOS-Task wird niemals vertauscht

Auf meinem System mit FreeRTOS starte ich 5 Aufgaben, von denen jede so programmiert ist, dass sie sich zu einem bestimmten Zeitpunkt verzögern. Daher kann ich sehen, dass alle Aufgaben ein- und ausgetauscht werden und jede Aufgabe ausgeführt wird. Aber wenn ich eine Endlosschleife innerhalb einer Aufgabe betrete, wird diese Aufgabe NIEMALS ausgelagert.

Wie ist das möglich?

Antwort

2

Zuerst müssen Sie sicherstellen, dass configUSE_TIME_SLICING gesetzt ist. Dies aktiviert den Round-Robin-Scheduler, der es dem Scheduler ermöglicht, das zu tun, was Sie erwarten.

Es wird auch nur dann zu einer anderen Aufgabe wechseln, wenn sie von gleicher oder höherer Priorität ist.

+0

Wo kann ich 'configUSE_TIME_SLICING' konfigurieren? – user2162550

+0

Wenn Sie es nicht selbst definiert haben, denke ich, dass es automatisch in FreeRTOS.h gesetzt wird. Wenn Sie es selbst definiert haben, muss es 1 sein. Versuchen Sie, die Quellen zu suchen! –