Processing time between tasks with the same priority

orifai01 wrote on Tuesday, May 09, 2017:

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.

rtel wrote on Tuesday, May 09, 2017:

…the same way it does when configUSE_PREEMPTION is 1, it will always
choose the task of that priority that has been waiting the longest.

rtel wrote on Tuesday, May 09, 2017:

Sorry, I meant the same way it does when configUSE_TIME_SLICING is 1.

heinbali01 wrote on Tuesday, May 09, 2017:

And so :

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.