Hi,
I wonder how the scheduler decides between two tasks with the same priority, when configUSE_PREEMPTION equals to 1 and configUSE_TIME_SLICING equals to 0 (i.e. a context switch should not occur on a tick interrupt).
Thank you in advanced.
the [way the] scheduler decides between two tasks with the same priority
is
…the same way it does when configUSE_TIME_SLICING is 1, it will always
choose the task of that priority that has been waiting the longest.
FreeRTOS has a principle of “fairness”:
● The runnable task with the highest priority will be selected
● If the are more runnable tasks with the highest priority, the one which is waiting the longest will go first
( where “runnable” means “ready to run”, enlisted in the pxReadyTasksLists[] )
As you probably know, configUSE_TIME_SLICING needs configUSE_PREEMPTION to be effective.
With time-slicing enabled, the clock-tick will force a task-switch, in case there are more runnable tasks of the same priority.
Without time-slicing enabled, a task must yield explicitly in order to switch to the next same priority-task.