Choosing Priorities for Real Applications in FreeRTOS
📖 Scenario: You are developing a simple embedded system using FreeRTOS. The system has three tasks: reading sensor data, controlling an actuator, and logging data. Each task needs a priority to decide which runs first when multiple tasks are ready.Choosing the right priorities helps the system work smoothly and respond quickly to important events.
🎯 Goal: You will create three FreeRTOS tasks with specific priorities to manage sensor reading, actuator control, and data logging. You will assign priorities so that the actuator control runs first, sensor reading second, and logging last.
📋 What You'll Learn
Create three tasks named SensorTask, ActuatorTask, and LoggerTask
Assign priority 3 to ActuatorTask
Assign priority 2 to SensorTask
Assign priority 1 to LoggerTask
Use xTaskCreate to create each task with the correct priority
💡 Why This Matters
🌍 Real World
Embedded systems like robots, home automation, and industrial machines use FreeRTOS tasks with priorities to manage multiple jobs smoothly.
💼 Career
Understanding task priorities is essential for embedded software engineers working on real-time operating systems to ensure timely and reliable system behavior.
Progress0 / 4 steps
1
Create three empty FreeRTOS tasks
Write three empty task functions named SensorTask, ActuatorTask, and LoggerTask. Each should take a void *pvParameters argument and have an infinite loop with vTaskDelay(1000 / portTICK_PERIOD_MS); inside.
FreeRTOS
Hint
Define each task as a function with void *pvParameters parameter and an infinite loop using for (;;).
2
Declare task handles for each task
Declare three variables of type TaskHandle_t named SensorTaskHandle, ActuatorTaskHandle, and LoggerTaskHandle to hold the task handles.
FreeRTOS
Hint
Use TaskHandle_t type to declare variables for each task handle.
3
Create the three tasks with correct priorities
Use xTaskCreate to create ActuatorTask with priority 3, SensorTask with priority 2, and LoggerTask with priority 1. Pass the address of each task handle variable to store the created task handle.
FreeRTOS
Hint
Use xTaskCreate with parameters: task function, name, stack size (1000), NULL for parameters, priority, and address of task handle.
4
Print the task priorities to verify
Use printf to print the priorities of ActuatorTaskHandle, SensorTaskHandle, and LoggerTaskHandle using uxTaskPriorityGet. Print in this exact format: "ActuatorTask priority: 3\nSensorTask priority: 2\nLoggerTask priority: 1\n".
FreeRTOS
Hint
Use printf and uxTaskPriorityGet to print each task's priority exactly as shown.
Practice
(1/5)
1. In FreeRTOS, what does a higher task priority number mean?
easy
A. The task runs before lower priority tasks
B. The task uses less memory
C. The task runs slower
D. The task is paused
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 A
Quick Check:
Higher priority = runs first [OK]
Hint: Higher number means task runs first [OK]
Common Mistakes:
Thinking higher priority means slower task
Confusing priority with memory usage
Assuming priority pauses the task
2. Which of the following is the correct way to set a task priority in FreeRTOS?
easy
A. xTaskCreate(taskFunction, "Task", stackSize, NULL, -1, NULL);
B. xTaskCreate(taskFunction, "Task", stackSize, NULL, "high", NULL);
C. xTaskCreate(taskFunction, "Task", stackSize, NULL, 5, NULL);
D. xTaskCreate(taskFunction, "Task", stackSize, NULL, 0.5, NULL);
Solution
Step 1: Check parameter for priority in xTaskCreate
The fifth parameter in xTaskCreate is the task priority and must be an integer.