Bird
Raised Fist0
FreeRTOSprogramming~20 mins

Choosing priorities for real applications in FreeRTOS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
FreeRTOS Priority Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this FreeRTOS task priority example?

Consider two tasks created with different priorities. What will be the output order of the print statements?

FreeRTOS
void Task1(void *pvParameters) {
    printf("Task 1 running\n");
    printf("Task 1 finished\n");
    vTaskDelete(NULL);
}

void Task2(void *pvParameters) {
    printf("Task 2 running\n");
    printf("Task 2 finished\n");
    vTaskDelete(NULL);
}

int main() {
    xTaskCreate(Task1, "Task1", 1000, NULL, 2, NULL);
    xTaskCreate(Task2, "Task2", 1000, NULL, 3, NULL);
    vTaskStartScheduler();
    return 0;
}
ATask 1 running\nTask 2 running\nTask 2 finished\nTask 1 finished\n
BTask 1 running\nTask 1 finished\nTask 2 running\nTask 2 finished\n
CTask 2 running\nTask 2 finished\nTask 1 running\nTask 1 finished\n
DTask 2 running\nTask 1 running\nTask 1 finished\nTask 2 finished\n
Attempts:
2 left
💡 Hint

Remember, higher priority tasks preempt lower priority ones immediately.

🧠 Conceptual
intermediate
1:30remaining
Which priority assignment best avoids priority inversion?

You have three tasks: A (high priority), B (medium priority), and C (low priority). Task C holds a resource needed by Task A. Which priority assignment helps avoid priority inversion?

AAssign all tasks the same priority.
BKeep Task C at the lowest priority always.
CAssign Task B the highest priority to preempt Task C.
DAssign Task C the highest priority temporarily while it holds the resource.
Attempts:
2 left
💡 Hint

Think about priority inheritance to prevent blocking.

🔧 Debug
advanced
2:30remaining
Why does this FreeRTOS system freeze with these priorities?

Given three tasks with priorities 1, 2, and 3, the system freezes after startup. What is the likely cause?

FreeRTOS
void TaskLow(void *pvParameters) {
    while(1) {
        // Does some work
    }
}

void TaskMedium(void *pvParameters) {
    while(1) {
        // Does some work
    }
}

void TaskHigh(void *pvParameters) {
    while(1) {
        // Does some work
    }
}

int main() {
    xTaskCreate(TaskLow, "Low", 1000, NULL, 1, NULL);
    xTaskCreate(TaskMedium, "Medium", 1000, NULL, 2, NULL);
    xTaskCreate(TaskHigh, "High", 1000, NULL, 3, NULL);
    vTaskStartScheduler();
    return 0;
}
ATaskHigh is starving lower priority tasks causing system freeze.
BTaskLow has a blocking call causing deadlock.
CTaskMedium has a syntax error preventing scheduler start.
DStack sizes are too small causing overflow.
Attempts:
2 left
💡 Hint

Consider how higher priority tasks affect lower priority ones.

📝 Syntax
advanced
1:30remaining
Which option correctly sets a task priority in FreeRTOS?

Choose the correct way to set a task's priority to 5 after creation.

FreeRTOS
TaskHandle_t xHandle = NULL;
xTaskCreate(TaskFunction, "Task", 1000, NULL, 3, &xHandle);
// Set priority here
AxTaskSetPriority(xHandle, 5);
BvTaskPrioritySet(xHandle, 5);
CvTaskSetPriority(xHandle, 5);
DxTaskPriorityChange(xHandle, 5);
Attempts:
2 left
💡 Hint

Check the FreeRTOS API naming conventions.

🚀 Application
expert
3:00remaining
How many tasks will run concurrently with these priorities and delays?

Three tasks are created with priorities 4, 3, and 2. Task with priority 4 calls vTaskDelay(100) in its loop. How many tasks run concurrently during the delay?

FreeRTOS
void TaskHigh(void *pvParameters) {
    while(1) {
        // Do work
        vTaskDelay(pdMS_TO_TICKS(100));
    }
}

void TaskMid(void *pvParameters) {
    while(1) {
        // Do work
    }
}

void TaskLow(void *pvParameters) {
    while(1) {
        // Do work
    }
}

int main() {
    xTaskCreate(TaskHigh, "High", 1000, NULL, 4, NULL);
    xTaskCreate(TaskMid, "Mid", 1000, NULL, 3, NULL);
    xTaskCreate(TaskLow, "Low", 1000, NULL, 2, NULL);
    vTaskStartScheduler();
    return 0;
}
AOnly one task runs during the delay: Mid.
BNo tasks run during the delay.
CAll three tasks run concurrently during the delay.
DTwo tasks run concurrently during the delay: Mid and Low.
Attempts:
2 left
💡 Hint

Remember that vTaskDelay makes the task blocked, allowing lower priority tasks to run.

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