Scheduler Algorithms

Can you tell me what scheduler algorithms are supported by FreeRTOS?
Seems that a DM scheduler algorithm is supported. Are there other static algorithms supported?
Does FreeRTOS support any dynamic scheduler algorithms? (LST, EDF, LRT, etc)

FreeRTOS is a very simple kernel/executive, originally designed to have a tiny footprint. As such, out-of-the-box at least, and in its default configuration, its scheduling algorithm is fixed and implemented as a very simple fixed priority premptive algorithm (in other words, it always executes the highest priority task that is able to run). Fixed priority in that, other than when priority inheritance kicks in for a mutex, the scheduler will not change the priority of a task - although the application writer can through the FreeRTOS API.

It also implements round robin scheduling, so tasks of the same priority will execute in turn, with a task switch between equal priority tasks on each tick interrupt.

configUSE_PREEMPTION is used to turn pre-emption off, in which case it reverts to being a cooperative scheduler only.

Likewise configUSE_TIMESLICING is used to turn time slicing off, but we don’t advice that unless you are an experienced user.

This is all documented on the website and in the book.

One perhaps important thing to note, is that no where does FreeRTOS have a way to provide it with the ‘deadline’ of a task, so most of the dynamic algorithms wouldn’t have a core piece of information to operate on. Also, there is no report of ‘progress’ so another important piece is missing.

As Richard Barry implies, it is possible to add a layer of your own on top of FreeRTOS that gets that sort of information from the tasks, and adjusts the priorities as these change.

Earliest Deadline First would be the easiest to implement, as then you would only need to adjust priorities as tasks establish new deadlines. Other scheduling algorithms would need to be periodically updated with the progress of the tasks and update as these and time changes.