We choose task priorities to decide which task runs first when many tasks want to run. This helps important tasks finish quickly.
Choosing priorities for real applications in FreeRTOS
xTaskCreate(TaskFunction, "TaskName", StackSize, Parameters, Priority, TaskHandle);Priority is a number where higher means more important.
Priorities usually start at 0 (lowest) up to configMAX_PRIORITIES - 1.
xTaskCreate(Task1, "SensorTask", 1000, NULL, 3, NULL);
xTaskCreate(Task2, "LoggerTask", 1000, NULL, 1, NULL);
xTaskCreate(Task3, "IdleTask", 1000, NULL, 0, NULL);
This program creates two tasks: SensorTask with higher priority 3 and LoggerTask with lower priority 1. SensorTask prints "Sensor reading" every second. LoggerTask prints "Logging data" every two seconds. Because SensorTask has higher priority, it runs first whenever ready.
#include "FreeRTOS.h" #include "task.h" #include <stdio.h> void SensorTask(void *pvParameters) { for (;;) { printf("Sensor reading\n"); vTaskDelay(pdMS_TO_TICKS(1000)); } } void LoggerTask(void *pvParameters) { for (;;) { printf("Logging data\n"); vTaskDelay(pdMS_TO_TICKS(2000)); } } int main(void) { xTaskCreate(SensorTask, "SensorTask", 1000, NULL, 3, NULL); xTaskCreate(LoggerTask, "LoggerTask", 1000, NULL, 1, NULL); vTaskStartScheduler(); for (;;) {} return 0; }
Higher priority tasks can interrupt lower priority ones.
Be careful to avoid priority inversion where a low priority task blocks a high priority one.
Use priorities to keep your system responsive and efficient.
Task priority decides which task runs first in FreeRTOS.
Higher number means higher priority and more importance.
Set priorities based on how fast tasks must respond.
Practice
Solution
Step 1: Understand task priority meaning
In FreeRTOS, task priority determines which task the scheduler runs first.Step 2: Higher number means higher priority
A higher priority number means the task is more important and runs before lower priority tasks.Final Answer:
The task runs before lower priority tasks -> Option AQuick Check:
Higher priority = runs first [OK]
- Thinking higher priority means slower task
- Confusing priority with memory usage
- Assuming priority pauses the task
Solution
Step 1: Check parameter for priority in xTaskCreate
The fifth parameter in xTaskCreate is the task priority and must be an integer.Step 2: Validate options
xTaskCreate(taskFunction, "Task", stackSize, NULL, 5, NULL); uses integer 5, which is valid. xTaskCreate(taskFunction, "Task", stackSize, NULL, "high", NULL); uses a string, invalid. xTaskCreate(taskFunction, "Task", stackSize, NULL, -1, NULL); uses negative priority, invalid. xTaskCreate(taskFunction, "Task", stackSize, NULL, 0.5, NULL); uses float, invalid.Final Answer:
xTaskCreate(taskFunction, "Task", stackSize, NULL, 5, NULL); -> Option CQuick Check:
Priority must be integer >= 0 [OK]
- Using string or float for priority
- Using negative numbers for priority
- Confusing parameter order
Solution
Step 1: Compare task priorities
TaskB has priority 5, TaskA has 3, TaskC has 2.Step 2: Highest priority runs first
Since 5 is highest, TaskB runs first when all are ready.Final Answer:
TaskB -> Option DQuick Check:
Highest priority = 5 = TaskB [OK]
- Choosing lowest priority task
- Thinking tasks run simultaneously
- Ignoring priority values
Solution
Step 1: Understand equal priority behavior
Tasks with same priority share CPU time via time slicing.Step 2: Effects of equal priority
This can cause unpredictable timing because tasks switch frequently, but no starvation occurs.Final Answer:
Tasks will share CPU time but may cause unpredictable timing -> Option AQuick Check:
Same priority = time slicing, possible timing issues [OK]
- Assuming one task never runs
- Expecting system crash
- Ignoring time slicing behavior
Solution
Step 1: Identify task urgency
SensorRead must respond fastest, so highest priority. UIUpdate is medium, DataLogging less urgent.Step 2: Assign priorities accordingly
Assign SensorRead=3 (highest), UIUpdate=2, DataLogging=1 (lowest).Final Answer:
SensorRead=3, UIUpdate=2, DataLogging=1 -> Option BQuick Check:
Fastest task gets highest priority [OK]
- Giving low priority to fastest task
- Assigning same priority to all
- Reversing urgency order
Ready to prove it?
Pass the test and this pattern moves unknown
