2016-07-07 16 views
0

Eine kleine Frage über den freeRTOS Taskplaner:FreeRTOS Kontextschalter - xQueueSend

Ist die Scheduler Aufgabe innerhalb der xQueueSend Funktion aufgerufen oder wird es beim nächsten System tick nennen?

+1

Ich hasse es, die gleiche Frage an mehreren Orten zu beantworten, so werde einfach einen Link zu meiner vorherigen Antwort https://sourceforge.net/p/freertos/discussion/382005/thread/f0cb1a73/ (die auch in der erscheinen wird Support-Forum-Archiv] (http://www.freertos.org/FreeRTOS_Support_Forum_Archive/freertos_support_forum_archive_index.html) am Ende der Woche). – Richard

Antwort

0

FreeRTOS führt immer die Task mit der höchsten Priorität aus, die ausgeführt werden kann. Das heißt, wenn Sie eine Queue, Semaphore, direkte Aufgabenbenachrichtigung, Ereignisgruppe, Mutex (alles andere?) So verwenden, dass eine andere Aufgabe nicht blockiert und die entsperrte Aufgabe eine höhere Priorität hat als die laufende Aufgabe, Dann schaltet der Scheduler auf die entsperrte Task um. Eine Ausnahme ist, wenn der Anwendungs-Writer den Scheduler durch Aufrufen von vTaskSuspendAll() gesperrt hat. In diesem Fall wird die entsperrte Task solange ausgesetzt, bis der Anwendungs-Writer xTaskResumeAll() aufruft - in diesem Fall die Task mit der höchsten Priorität run wird sofort gestartet (bevor der Aufruf von xTaskResumeAll() even zurückgibt).