Priority-based scheduling helps decide which task runs first based on how important it is. This way, important tasks get done quickly.
Priority-based scheduling in FreeRTOS
BaseType_t xTaskCreate(TaskFunction_t pxTaskCode, const char * const pcName, configSTACK_DEPTH_TYPE usStackDepth, void *pvParameters, UBaseType_t uxPriority, TaskHandle_t *pxCreatedTask);
uxPriority is the task priority number; higher means more important.
FreeRTOS runs the highest priority task that is ready to run.
xTaskCreate(Task1, "Task1", 1000, NULL, 2, NULL);
xTaskCreate(Task2, "Task2", 1000, NULL, 5, NULL);
This program creates two tasks. The high priority task runs more often because it has a higher priority (3) than the low priority task (1). You will see the high priority task message more frequently.
#include "FreeRTOS.h" #include "task.h" #include <stdio.h> void TaskLowPriority(void *pvParameters) { for (;;) { printf("Low priority task running\n"); vTaskDelay(pdMS_TO_TICKS(1000)); } } void TaskHighPriority(void *pvParameters) { for (;;) { printf("High priority task running\n"); vTaskDelay(pdMS_TO_TICKS(500)); } } int main(void) { xTaskCreate(TaskLowPriority, "LowPriority", 1000, NULL, 1, NULL); xTaskCreate(TaskHighPriority, "HighPriority", 1000, NULL, 3, NULL); vTaskStartScheduler(); for(;;); return 0; }
Higher priority tasks can interrupt lower priority tasks.
If two tasks have the same priority, FreeRTOS switches between them to share CPU time.
Use priorities carefully to avoid starving lower priority tasks.
Priority-based scheduling runs the most important task first.
Set task priority when creating tasks with xTaskCreate.
Higher priority tasks run more often and can interrupt lower priority ones.
Practice
What does priority-based scheduling in FreeRTOS ensure?
Solution
Step 1: Understand priority-based scheduling
Priority-based scheduling means tasks with higher priority get CPU time before lower priority tasks.Step 2: Apply this to FreeRTOS task execution
FreeRTOS runs the highest priority task that is ready to run first, preempting lower priority tasks.Final Answer:
The highest priority task runs first -> Option CQuick Check:
Priority-based scheduling = highest priority runs first [OK]
- Thinking tasks run in creation order
- Assuming equal CPU time for all tasks
- Believing tasks run randomly
Which of the following is the correct way to set a task priority when creating a task in FreeRTOS?
xTaskCreate(TaskFunction, "TaskName", 1000, NULL, ___, &TaskHandle);Solution
Step 1: Identify parameters of xTaskCreate
The fifth parameter in xTaskCreate is the task priority.Step 2: Match parameter to correct argument
Passing 'priority' sets the task's priority level correctly.Final Answer:
priority -> Option DQuick Check:
Fifth parameter in xTaskCreate = priority [OK]
- Confusing stack size with priority
- Using task handle as priority
- Passing task name instead of priority
Given the following FreeRTOS tasks with priorities, which task will run first?
Task A priority = 2
Task B priority = 3
Task C priority = 1
Solution
Step 1: Compare task priorities
Task B has priority 3, which is higher than Task A (2) and Task C (1).Step 2: Determine which task runs first
FreeRTOS runs the highest priority task first, so Task B runs before others.Final Answer:
Task B -> Option BQuick Check:
Highest priority (3) = Task B [OK]
- Choosing task with lowest priority
- Assuming tasks run simultaneously
- Ignoring priority values
Identify the error in this FreeRTOS task creation code snippet:
BaseType_t result = xTaskCreate(TaskFunc, "Task1", 500, NULL, 0, NULL);
if(result != pdPASS) {
// Handle error
}What is wrong with the priority value?
Solution
Step 1: Understand priority 0 in FreeRTOS
Priority 0 is the lowest priority and is valid in FreeRTOS.Step 2: Check if priority 0 causes error
Priority 0 does not cause an error; task creation can succeed with it.Final Answer:
Priority 0 means lowest priority but is valid -> Option AQuick Check:
Priority 0 is valid lowest priority [OK]
- Thinking priority 0 is invalid
- Assuming priority must be > 5
- Using negative priority values
You have three tasks with priorities 2, 4, and 3. Task with priority 4 is blocked waiting for an event. Which task will FreeRTOS schedule next?
Solution
Step 1: Understand task states and scheduling
FreeRTOS schedules the highest priority task that is ready (not blocked).Step 2: Identify ready tasks
Task with priority 4 is blocked, so it cannot run now. Tasks with priority 3 and 2 are ready.Step 3: Choose highest priority ready task
Between priority 3 and 2, priority 3 is higher, so it runs next.Final Answer:
Task with priority 3 -> Option AQuick Check:
Highest ready priority = 3 [OK]
- Trying to run blocked task
- Ignoring task states
- Assuming no task runs if highest priority blocked
Ready to prove it?
Pass the test and this pattern moves unknown
