📖 Scenario: You are working on a small embedded system using FreeRTOS. You want to understand how task priorities are numbered and how to set them correctly.
🎯 Goal: Learn how to define task priorities using FreeRTOS constants and create tasks with specific priority numbers.
📋 What You'll Learn
Create a variable for the maximum priority using FreeRTOS constant
Create a variable for the minimum priority using FreeRTOS constant
Create a task with a priority between minimum and maximum
Print the priority values to verify
💡 Why This Matters
🌍 Real World
Embedded systems often use FreeRTOS to manage multiple tasks with different priorities to ensure important tasks run first.
💼 Career
Understanding task priority numbering is essential for embedded developers working with real-time operating systems like FreeRTOS.
Progress0 / 4 steps
1
Define FreeRTOS priority constants
Create two variables: max_priority set to configMAX_PRIORITIES - 1 and min_priority set to 0.
FreeRTOS
Hint
FreeRTOS priorities start at 0 for the lowest priority and go up to configMAX_PRIORITIES - 1.
2
Set a task priority between min and max
Create a variable task_priority and set it to the middle priority between min_priority and max_priority using integer division.
FreeRTOS
Hint
Use integer division // to find the middle priority.
3
Create a FreeRTOS task with the chosen priority
Write a line to create a FreeRTOS task called vTaskExample with priority task_priority. Use the function xTaskCreate() with parameters: vTaskExample, "ExampleTask", 1000, NULL, task_priority, NULL.
FreeRTOS
Hint
Use xTaskCreate() with the correct parameters to set the task priority.
4
Print the priority values
Write three print() statements to display min_priority, task_priority, and max_priority with descriptive text.
FreeRTOS
Hint
Use print() with f-strings to show the priority values clearly.
Practice
(1/5)
1. In FreeRTOS, what does a higher priority number mean for a task?
easy
A. The task runs before lower priority tasks
B. The task runs after lower priority tasks
C. The task runs at the same time as lower priority tasks
D. The task is ignored by the scheduler
Solution
Step 1: Understand priority numbering
In FreeRTOS, priority numbers start at 0 for the lowest priority and increase for higher priorities.
Step 2: Relate priority to task execution
Higher priority tasks are scheduled to run before lower priority tasks to ensure responsiveness.
Final Answer:
The task runs before lower priority tasks -> Option A
Quick Check:
Higher priority number = runs first [OK]
Hint: Higher number means higher priority and runs first [OK]
Common Mistakes:
Thinking higher number means lower priority
Assuming tasks run simultaneously regardless of priority
Confusing priority with task creation order
2. Which of the following is the correct way to define the highest priority in FreeRTOS if configMAX_PRIORITIES is 5?
easy
A. 5
B. 6
C. 4
D. 0
Solution
Step 1: Understand priority range
Priority numbers start at 0 and go up to configMAX_PRIORITIES - 1.
Step 2: Calculate highest priority
With configMAX_PRIORITIES = 5, highest priority is 5 - 1 = 4.
Hint: Highest priority = configMAX_PRIORITIES minus one [OK]
Common Mistakes:
Using configMAX_PRIORITIES as highest priority directly
Using 0 as highest priority
Choosing a number outside the allowed range
3. Given three tasks with priorities 2, 4, and 1, which task will FreeRTOS schedule to run first?
medium
A. Task with priority 4
B. Task with priority 2
C. Task with priority 1
D. All run simultaneously
Solution
Step 1: Identify task priorities
Tasks have priorities 2, 4, and 1 respectively.
Step 2: Determine highest priority
Priority 4 is the highest number, so that task runs first.
Final Answer:
Task with priority 4 -> Option A
Quick Check:
Highest priority runs first = 4 [OK]
Hint: Task with highest priority number runs first [OK]
Common Mistakes:
Choosing the lowest priority task
Assuming tasks run in creation order
Thinking tasks run simultaneously
4. What is wrong with this priority assignment if configMAX_PRIORITIES is 3? vTaskPrioritySet(taskHandle, 3);
medium
A. Priority 3 is valid and highest
B. Priority 3 is out of range; max is 2
C. Priority must be zero
D. Priority must be negative
Solution
Step 1: Check allowed priority range
Priorities go from 0 to configMAX_PRIORITIES - 1, so 0 to 2 here.
Step 2: Validate assigned priority
Priority 3 is outside this range and invalid.
Final Answer:
Priority 3 is out of range; max is 2 -> Option B
Quick Check:
Max priority = 2, 3 is invalid [OK]
Hint: Priority must be less than configMAX_PRIORITIES [OK]
Common Mistakes:
Using configMAX_PRIORITIES as a valid priority
Assigning negative priorities
Assuming priority zero is highest
5. You have tasks with priorities 0, 1, and 2. You want the system to always run the task with priority 1 before the others, but currently priority 2 runs first. How can you fix this using FreeRTOS priority numbering?
hard
A. Set all tasks to priority 0
B. Set the task currently at 1 to priority 0
C. Set the task currently at 2 to priority 0
D. Set the priority of the task currently at 1 to 3 and others lower
Solution
Step 1: Understand current priorities
Task with priority 2 runs first because it has highest priority.
Step 2: Adjust priorities to reorder execution
Increase the priority of the task currently at 1 to a number higher than 2 (e.g., 3) so it runs first.
Step 3: Lower other tasks' priorities
Set other tasks to lower priorities to ensure the desired task runs first.
Final Answer:
Set the priority of the task currently at 1 to 3 and others lower -> Option D
Quick Check:
Higher priority number runs first, so raise desired task's priority [OK]
Hint: Raise desired task priority above others to run first [OK]
Common Mistakes:
Lowering all priorities to zero
Not increasing the desired task's priority
Assuming priority 0 is highest
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.