Bird
Raised Fist0
FreeRTOSprogramming~5 mins

Choosing priorities for real applications in FreeRTOS

Choose your learning style10 modes available
Introduction

We choose task priorities to decide which task runs first when many tasks want to run. This helps important tasks finish quickly.

When you have multiple tasks and want the most important one to run first.
When some tasks must respond quickly, like reading a sensor or handling user input.
When you want to avoid delays in critical parts of your program.
When you want less important tasks to run only when the system is free.
When you want to balance work so the system stays responsive.
Syntax
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.

Examples
This creates a task named SensorTask with priority 3, which is quite important.
FreeRTOS
xTaskCreate(Task1, "SensorTask", 1000, NULL, 3, NULL);
This creates a LoggerTask with priority 1, less important than SensorTask.
FreeRTOS
xTaskCreate(Task2, "LoggerTask", 1000, NULL, 1, NULL);
This creates an IdleTask with the lowest priority 0, running only when others are idle.
FreeRTOS
xTaskCreate(Task3, "IdleTask", 1000, NULL, 0, NULL);
Sample Program

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.

FreeRTOS
#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;
}
OutputSuccess
Important Notes

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.

Summary

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

(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

  1. Step 1: Understand task priority meaning

    In FreeRTOS, task priority determines which task the scheduler runs first.
  2. Step 2: Higher number means higher priority

    A higher priority number means the task is more important and runs before lower priority tasks.
  3. Final Answer:

    The task runs before lower priority tasks -> Option A
  4. 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

  1. Step 1: Check parameter for priority in xTaskCreate

    The fifth parameter in xTaskCreate is the task priority and must be an integer.
  2. 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.
  3. Final Answer:

    xTaskCreate(taskFunction, "Task", stackSize, NULL, 5, NULL); -> Option C
  4. Quick Check:

    Priority must be integer >= 0 [OK]
Hint: Priority is an integer in xTaskCreate [OK]
Common Mistakes:
  • Using string or float for priority
  • Using negative numbers for priority
  • Confusing parameter order
3. Given three tasks with priorities: TaskA=3, TaskB=5, TaskC=2. Which task will run first when all are ready?
medium
A. TaskA
B. They run simultaneously
C. TaskC
D. TaskB

Solution

  1. Step 1: Compare task priorities

    TaskB has priority 5, TaskA has 3, TaskC has 2.
  2. Step 2: Highest priority runs first

    Since 5 is highest, TaskB runs first when all are ready.
  3. Final Answer:

    TaskB -> Option D
  4. Quick Check:

    Highest priority = 5 = TaskB [OK]
Hint: Highest priority number runs first [OK]
Common Mistakes:
  • Choosing lowest priority task
  • Thinking tasks run simultaneously
  • Ignoring priority values
4. You set two tasks with the same priority in FreeRTOS. What is a likely issue?
medium
A. Tasks will share CPU time but may cause unpredictable timing
B. Tasks may starve lower priority tasks
C. One task will never run
D. System will crash immediately

Solution

  1. Step 1: Understand equal priority behavior

    Tasks with same priority share CPU time via time slicing.
  2. Step 2: Effects of equal priority

    This can cause unpredictable timing because tasks switch frequently, but no starvation occurs.
  3. Final Answer:

    Tasks will share CPU time but may cause unpredictable timing -> Option A
  4. Quick Check:

    Same priority = time slicing, possible timing issues [OK]
Hint: Same priority tasks share CPU, timing may vary [OK]
Common Mistakes:
  • Assuming one task never runs
  • Expecting system crash
  • Ignoring time slicing behavior
5. You have three tasks: SensorRead (must respond fast), DataLogging (less urgent), and UIUpdate (medium urgency). How should you assign priorities?
hard
A. DataLogging=3, UIUpdate=2, SensorRead=1
B. SensorRead=3, UIUpdate=2, DataLogging=1
C. UIUpdate=3, SensorRead=2, DataLogging=1
D. All tasks priority 1

Solution

  1. Step 1: Identify task urgency

    SensorRead must respond fastest, so highest priority. UIUpdate is medium, DataLogging less urgent.
  2. Step 2: Assign priorities accordingly

    Assign SensorRead=3 (highest), UIUpdate=2, DataLogging=1 (lowest).
  3. Final Answer:

    SensorRead=3, UIUpdate=2, DataLogging=1 -> Option B
  4. Quick Check:

    Fastest task gets highest priority [OK]
Hint: Fastest task gets highest priority [OK]
Common Mistakes:
  • Giving low priority to fastest task
  • Assigning same priority to all
  • Reversing urgency order
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard