Bird
Raised Fist0
FreeRTOSprogramming~20 mins

Why scheduling determines real-time behavior in FreeRTOS - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Real-Time Scheduling Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of task scheduling with preemption

Consider two FreeRTOS tasks with different priorities. Task A has higher priority than Task B. Task B starts first and then Task A is created. What will be the output sequence of the print statements?

FreeRTOS
void TaskA(void *pvParameters) {
    for (;;) {
        printf("A\n");
        vTaskDelay(pdMS_TO_TICKS(100));
    }
}

void TaskB(void *pvParameters) {
    printf("B\n");
    vTaskDelay(pdMS_TO_TICKS(50));
    xTaskCreate(TaskA, "TaskA", 1000, NULL, 2, NULL);
    for (;;) {
        printf("B\n");
        vTaskDelay(pdMS_TO_TICKS(100));
    }
}

int main() {
    xTaskCreate(TaskB, "TaskB", 1000, NULL, 1, NULL);
    vTaskStartScheduler();
    return 0;
}
AB\nA\nB\nA\nB\nA\n...
BA\nB\nA\nB\nA\nB\n...
CB\nB\nB\nA\nA\nA\n...
DA\nA\nA\nB\nB\nB\n...
Attempts:
2 left
💡 Hint

Remember that higher priority tasks preempt lower priority ones immediately.

🧠 Conceptual
intermediate
1:30remaining
Effect of scheduling policy on real-time guarantees

Which scheduling policy in FreeRTOS best ensures that high priority tasks meet their deadlines?

ARandom scheduling of tasks
BRound-robin scheduling with equal priority for all tasks
CCooperative scheduling without preemption
DPreemptive priority-based scheduling
Attempts:
2 left
💡 Hint

Think about which policy allows immediate switching to important tasks.

🔧 Debug
advanced
2:30remaining
Identify the scheduling issue causing missed deadlines

A FreeRTOS system has a high priority task that sometimes misses its deadline. The code snippet below shows the task creation and delay. What scheduling issue is causing the missed deadline?

FreeRTOS
xTaskCreate(HighPriorityTask, "High", 1000, NULL, 3, NULL);

void HighPriorityTask(void *pvParameters) {
    for (;;) {
        // Critical work
        vTaskDelay(pdMS_TO_TICKS(200));
    }
}

xTaskCreate(LowPriorityTask, "Low", 1000, NULL, 1, NULL);

void LowPriorityTask(void *pvParameters) {
    for (;;) {
        // Long blocking operation
        vTaskDelay(pdMS_TO_TICKS(500));
    }
}
AHigh priority task misses deadline because it uses vTaskDelay too long
BHigh priority task is starved because low priority task has higher priority
CLow priority task blocks high priority task due to cooperative scheduling
DHigh priority task is preempted by low priority task due to priority inversion
Attempts:
2 left
💡 Hint

Consider how scheduling works when preemption is disabled or cooperative.

📝 Syntax
advanced
1:30remaining
Identify the syntax error affecting task scheduling

Which option contains a syntax error that will prevent the FreeRTOS scheduler from starting?

FreeRTOS
void main() {
    xTaskCreate(Task1, "Task1", 1000, NULL, 2, NULL);
    xTaskCreate(Task2, "Task2", 1000, NULL, 1, NULL);
    vTaskStartScheduler()
}

void Task1(void *pvParameters) {
    for (;;) {
        // Task code
    }
}

void Task2(void *pvParameters) {
    for (;;) {
        // Task code
    }
}
AUsing void main() instead of int main()
BMissing semicolon after vTaskStartScheduler() call
CTask function missing void parameter type
DIncorrect task priority values (negative numbers)
Attempts:
2 left
💡 Hint

Check for missing punctuation that causes compilation failure.

🚀 Application
expert
3:00remaining
Design a scheduling strategy to guarantee real-time response

You have three tasks: SensorRead (high priority), DataProcessing (medium priority), and Logging (low priority). SensorRead must respond within 10ms. DataProcessing can be delayed up to 100ms. Logging is non-critical. Which scheduling approach best guarantees SensorRead meets its deadline?

AAssign SensorRead highest priority with preemptive scheduling; DataProcessing medium priority; Logging lowest priority
BAssign equal priority to all tasks and use round-robin scheduling
CUse cooperative scheduling with SensorRead yielding after completion
DAssign Logging highest priority to reduce CPU idle time
Attempts:
2 left
💡 Hint

Think about how priority and preemption affect response time.

Practice

(1/5)
1. Why is scheduling important in FreeRTOS for real-time behavior?
easy
A. It decides which task runs and when, affecting response time.
B. It controls the memory allocation for tasks.
C. It manages the power consumption of the system.
D. It handles the input/output operations automatically.

Solution

  1. Step 1: Understand scheduling role

    Scheduling in FreeRTOS controls task execution order and timing.
  2. Step 2: Connect scheduling to real-time

    By deciding which task runs and when, scheduling affects how fast the system reacts to events.
  3. Final Answer:

    It decides which task runs and when, affecting response time. -> Option A
  4. Quick Check:

    Scheduling controls task timing = It decides which task runs and when, affecting response time. [OK]
Hint: Scheduling controls task timing and response speed [OK]
Common Mistakes:
  • Confusing scheduling with memory management
  • Thinking scheduling manages power or I/O directly
  • Ignoring the impact on response time
2. Which FreeRTOS function is used to start the scheduler?
easy
A. vTaskDelay()
B. xTaskCreate()
C. vTaskStartScheduler()
D. xQueueSend()

Solution

  1. Step 1: Identify scheduler start function

    The function to start the FreeRTOS scheduler is vTaskStartScheduler().
  2. Step 2: Differentiate from other functions

    xTaskCreate() creates tasks, vTaskDelay() delays tasks, xQueueSend() sends to queues.
  3. Final Answer:

    vTaskStartScheduler() -> Option C
  4. Quick Check:

    Start scheduler function = vTaskStartScheduler() [OK]
Hint: Scheduler starts with vTaskStartScheduler() function [OK]
Common Mistakes:
  • Confusing task creation with scheduler start
  • Using delay or queue functions to start scheduler
  • Misspelling function names
3. Given two tasks with priorities 3 and 5, which task will FreeRTOS schedule first?
medium
A. Task with priority 5
B. Task created first runs first
C. Both run simultaneously
D. Task with priority 3

Solution

  1. Step 1: Understand priority meaning

    In FreeRTOS, higher numeric priority means higher importance.
  2. Step 2: Compare priorities 3 and 5

    Priority 5 is higher than 3, so the task with priority 5 runs first.
  3. Final Answer:

    Task with priority 5 -> Option A
  4. Quick Check:

    Higher priority runs first = Task with priority 5 [OK]
Hint: Higher numeric priority runs before lower [OK]
Common Mistakes:
  • Assuming lower number means higher priority
  • Thinking tasks run simultaneously
  • Believing creation order affects scheduling
4. What is wrong with this FreeRTOS code snippet?
void task1(void *pvParameters) {
  while(1) {
    // do work
  }
}

int main() {
  xTaskCreate(task1, "Task1", 1000, NULL, 1, NULL);
  // Missing scheduler start
  return 0;
}
medium
A. Task stack size is too large.
B. Scheduler is not started, so tasks never run.
C. Task priority is invalid.
D. Task function has wrong signature.

Solution

  1. Step 1: Check for scheduler start

    The code creates a task but does not call vTaskStartScheduler(), so no tasks run.
  2. Step 2: Verify other parts

    Stack size 1000 and priority 1 are valid; task signature is correct.
  3. Final Answer:

    Scheduler is not started, so tasks never run. -> Option B
  4. Quick Check:

    Missing scheduler start = Scheduler is not started, so tasks never run. [OK]
Hint: Always call vTaskStartScheduler() after creating tasks [OK]
Common Mistakes:
  • Forgetting to start the scheduler
  • Thinking stack size or priority causes no run
  • Assuming task signature is incorrect
5. How does using task priorities in FreeRTOS help meet real-time deadlines?
hard
A. Priorities automatically optimize CPU clock speed.
B. Priorities reduce memory usage for tasks.
C. Priorities allow tasks to run in parallel on a single core.
D. Higher priority tasks preempt lower ones, ensuring timely execution.

Solution

  1. Step 1: Understand preemption by priority

    FreeRTOS scheduler lets higher priority tasks interrupt lower priority ones.
  2. Step 2: Connect preemption to deadlines

    This ensures critical tasks run quickly to meet real-time deadlines.
  3. Final Answer:

    Higher priority tasks preempt lower ones, ensuring timely execution. -> Option D
  4. Quick Check:

    Priority preemption ensures deadlines = Higher priority tasks preempt lower ones, ensuring timely execution. [OK]
Hint: Higher priority tasks run first to meet deadlines [OK]
Common Mistakes:
  • Thinking priorities affect memory or CPU speed
  • Believing tasks run truly in parallel on one core
  • Ignoring preemption's role in timing
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