Bird
Raised Fist0
FreeRTOSprogramming~5 mins

Task priority assignment in FreeRTOS

Choose your learning style10 modes available
Introduction

Task priority assignment helps FreeRTOS decide which task should run first. It makes sure important tasks get CPU time before less important ones.

When you have multiple tasks and want some to run before others.
When a task needs to respond quickly, like reading a sensor.
When you want background tasks to run only when the CPU is free.
When you want to avoid delays in critical operations.
When managing tasks that depend on each other's timing.
Syntax
FreeRTOS
xTaskCreate(
  TaskFunction_t pvTaskCode,
  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.

Priorities usually start at 0 (lowest) and go up to configMAX_PRIORITIES - 1.

Examples
This creates a task named "Task1" with priority 2.
FreeRTOS
xTaskCreate(
  vTask1,
  "Task1",
  1000,
  NULL,
  2,
  NULL
);
Creates a sensor reading task with higher priority 5 to run quickly.
FreeRTOS
xTaskCreate(
  vSensorReadTask,
  "Sensor",
  500,
  NULL,
  5,
  NULL
);
Creates a background task with low priority 1 to run when CPU is free.
FreeRTOS
xTaskCreate(
  vBackgroundTask,
  "Background",
  800,
  NULL,
  1,
  NULL
);
Sample Program

This program creates two tasks: one with high priority (3) and one with low priority (1). The high priority task will run before the low priority task.

FreeRTOS
#include "FreeRTOS.h"
#include "task.h"
#include <stdio.h>

void vTaskHighPriority(void *pvParameters) {
    for (;;) {
        printf("High priority task running\n");
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

void vTaskLowPriority(void *pvParameters) {
    for (;;) {
        printf("Low priority task running\n");
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

int main(void) {
    xTaskCreate(vTaskHighPriority, "HighTask", 1000, NULL, 3, NULL);
    xTaskCreate(vTaskLowPriority, "LowTask", 1000, NULL, 1, NULL);
    vTaskStartScheduler();
    for (;;) {}
    return 0;
}
OutputSuccess
Important Notes

Higher priority tasks can interrupt lower priority tasks.

Use priorities carefully to avoid starving low priority tasks.

FreeRTOS priorities are integers; 0 is the lowest priority.

Summary

Task priority controls which task runs first in FreeRTOS.

Assign higher numbers to more important tasks.

Proper priority assignment helps your program run smoothly and responsively.

Practice

(1/5)
1.

In FreeRTOS, what does a higher task priority number mean?

easy
A. The task runs only when idle
B. The task runs after lower priority tasks
C. The task runs before lower priority tasks
D. The task is deleted automatically

Solution

  1. Step 1: Understand task priority meaning

    In FreeRTOS, tasks with higher priority numbers get CPU time before lower priority tasks.
  2. Step 2: Relate priority number to execution order

    A higher number means the task is more important and runs first.
  3. Final Answer:

    The task runs before lower priority tasks -> Option C
  4. Quick Check:

    Higher priority = runs first [OK]
Hint: Higher number means higher priority, runs first [OK]
Common Mistakes:
  • Thinking lower number means higher priority
  • Confusing priority with task state
  • Assuming priority controls memory usage
2.

Which of the following is the correct way to assign a priority of 3 to a task in FreeRTOS using xTaskCreate?

void vTaskFunction(void *pvParameters) { /* Task code */ }

xTaskCreate(vTaskFunction, "Task1", 1000, NULL, ?, NULL);
easy
A. taskPriority = 3
B. "3"
C. priority = 3
D. 3

Solution

  1. Step 1: Check xTaskCreate parameters

    The fifth parameter is the task priority and expects an integer value.
  2. Step 2: Identify correct priority assignment

    Passing 3 directly as an integer is correct; strings or assignments are invalid here.
  3. Final Answer:

    3 -> Option D
  4. Quick Check:

    Priority parameter = integer value [OK]
Hint: Priority is an integer, no quotes or assignments [OK]
Common Mistakes:
  • Using quotes around priority number
  • Writing assignment expressions inside parameters
  • Passing variable names without declaration
3.

Given the following FreeRTOS code snippet, which task will run first?

void TaskA(void *pvParameters) { while(1) {} }
void TaskB(void *pvParameters) { while(1) {} }

xTaskCreate(TaskA, "A", 1000, NULL, 2, NULL);
xTaskCreate(TaskB, "B", 1000, NULL, 4, NULL);
medium
A. TaskB
B. TaskA
C. Both run simultaneously
D. Neither runs

Solution

  1. Step 1: Identify task priorities

    TaskA has priority 2, TaskB has priority 4.
  2. Step 2: Determine which runs first

    TaskB has higher priority, so it runs before TaskA.
  3. Final Answer:

    TaskB -> Option A
  4. Quick Check:

    Higher priority task runs first [OK]
Hint: Higher priority number runs first [OK]
Common Mistakes:
  • Assuming tasks run in creation order
  • Thinking equal priority means simultaneous run
  • Ignoring priority values
4.

What is wrong with this FreeRTOS task creation code snippet?

void vTask(void *pvParameters) { /* code */ }

xTaskCreate(vTask, "Task", 1000, NULL, 5, NULL);
xTaskCreate(vTask, "Task", 1000, NULL, -1, NULL);
medium
A. Priority cannot be negative
B. Task name must be unique
C. Stack size must be zero
D. Task function must return int

Solution

  1. Step 1: Check priority values

    FreeRTOS priorities must be zero or positive integers; negative values are invalid.
  2. Step 2: Validate other parameters

    Task name can be reused, stack size 1000 is valid, and task function returns void as required.
  3. Final Answer:

    Priority cannot be negative -> Option A
  4. Quick Check:

    Priority >= 0 required [OK]
Hint: Priority must be zero or positive [OK]
Common Mistakes:
  • Using negative priority values
  • Thinking task names must be unique
  • Expecting task function to return int
5.

You have three tasks with priorities 1, 3, and 3. How should you assign priorities to ensure the most important task runs first and the least important runs last?

Choose the best priority assignment:

  • A: Task1=1, Task2=3, Task3=3
  • B: Task1=3, Task2=3, Task3=1
  • C: Task1=3, Task2=1, Task3=3
  • D: Task1=1, Task2=1, Task3=3
hard
A. Task1=1 (lowest), Task2=3, Task3=3 (highest)
B. Task1=3 (highest), Task2=3, Task3=1 (lowest)
C. Task1=3 (highest), Task2=1, Task3=3 (highest)
D. Task1=1, Task2=1, Task3=3 (highest)

Solution

  1. Step 1: Identify importance order

    The most important task should have highest priority (3), least important lowest (1).
  2. Step 2: Match priorities to tasks

    Task1=3 (highest), Task2=3, Task3=1 (lowest) assigns highest priority (3) to Task1 and Task2, and lowest (1) to Task3, ensuring important tasks run first.
  3. Final Answer:

    Task1=3 (highest), Task2=3, Task3=1 (lowest) -> Option B
  4. Quick Check:

    Highest priority = most important task [OK]
Hint: Assign highest number to most important task [OK]
Common Mistakes:
  • Assigning same priority to all tasks
  • Giving lowest priority to important tasks
  • Ignoring task importance 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