Time-slicing lets tasks with the same priority share the CPU fairly by taking turns. This keeps your program responsive and balanced.
Time-slicing for equal priority tasks in FreeRTOS
vTaskStartScheduler(); // FreeRTOS automatically time-slices tasks of equal priority // No special code needed to enable time-slicing
FreeRTOS automatically switches between tasks of the same priority every tick.
You just create tasks with the same priority; the scheduler handles the rest.
xTaskCreate(Task1, "Task 1", 1000, NULL, 2, NULL); xTaskCreate(Task2, "Task 2", 1000, NULL, 2, NULL); vTaskStartScheduler();
xTaskCreate(TaskA, "Task A", 1000, NULL, 1, NULL); xTaskCreate(TaskB, "Task B", 1000, NULL, 1, NULL); xTaskCreate(TaskC, "Task C", 1000, NULL, 3, NULL); vTaskStartScheduler();
This program creates two tasks with the same priority. FreeRTOS switches between them regularly, so both print their messages repeatedly.
#include "FreeRTOS.h" #include "task.h" #include <stdio.h> void Task1(void *pvParameters) { for (;;) { printf("Task 1 running\n"); vTaskDelay(pdMS_TO_TICKS(100)); } } void Task2(void *pvParameters) { for (;;) { printf("Task 2 running\n"); vTaskDelay(pdMS_TO_TICKS(100)); } } int main(void) { xTaskCreate(Task1, "Task 1", 1000, NULL, 2, NULL); xTaskCreate(Task2, "Task 2", 1000, NULL, 2, NULL); vTaskStartScheduler(); for(;;); // Should never reach here return 0; }
Time-slicing depends on the tick interrupt frequency; faster ticks mean more frequent switches.
If tasks block or delay themselves, time-slicing pauses until they are ready again.
Tasks with higher priority run before time-slicing happens among equal priority tasks.
Time-slicing lets tasks of the same priority share CPU time fairly.
FreeRTOS handles time-slicing automatically; just assign equal priorities.
This keeps your system responsive and balanced when running multiple tasks.
Practice
Solution
Step 1: Understand time-slicing concept
Time-slicing means the CPU divides its time between tasks that have the same priority.Step 2: Apply to FreeRTOS behavior
FreeRTOS automatically switches between equal priority tasks to share CPU time fairly.Final Answer:
The CPU time is shared fairly among tasks with the same priority. -> Option BQuick Check:
Time-slicing = fair CPU sharing [OK]
- Thinking only one task runs until it finishes
- Believing tasks run sequentially without switching
- Assuming lower priority tasks pause higher priority ones
Solution
Step 1: Check task priority parameters
In FreeRTOS, the fifth parameter in xTaskCreate is the task priority.Step 2: Identify equal priorities
Both tasks have priority 2 in xTaskCreate(task1, "Task1", 1000, NULL, 2, NULL); xTaskCreate(task2, "Task2", 1000, NULL, 2, NULL);, making them equal priority tasks.Final Answer:
Both tasks have priority 2, so they have equal priority. -> Option AQuick Check:
Same priority number = equal priority [OK]
- Assigning different priority numbers to tasks
- Confusing task stack size with priority
- Using priority 0 and 1 as equal
Solution
Step 1: Understand FreeRTOS scheduling for equal priority tasks
FreeRTOS uses time-slicing to switch between tasks of equal priority.Step 2: Predict scheduler behavior
The scheduler switches tasks periodically, giving each task CPU time in turn.Final Answer:
The scheduler switches between tasks periodically to share CPU time. -> Option DQuick Check:
Equal priority tasks share CPU via switching [OK]
- Thinking tasks run one after another without switching
- Assuming tasks run simultaneously on one core
- Believing one task blocks the other forever
Solution
Step 1: Check task states in FreeRTOS
Even with equal priority, a task that is blocked or waiting will not run.Step 2: Identify why a task never runs
If a task never runs, it is likely blocked or waiting indefinitely, not ready to run.Final Answer:
The task that never runs is blocked or waiting indefinitely. -> Option CQuick Check:
Blocked task = no CPU time [OK]
- Assuming higher priority task blocks lower priority always
- Believing FreeRTOS lacks time-slicing
- Ignoring task states like blocked or suspended
Solution
Step 1: Understand time-slicing with equal priority tasks
FreeRTOS scheduler switches tasks periodically to share CPU time fairly among equal priority tasks.Step 2: Analyze effect of different run durations before yielding
Even if tasks run different times before yielding, the scheduler enforces time slices to balance CPU time.Final Answer:
Each task gets equal CPU time slices regardless of run duration before yielding. -> Option AQuick Check:
Time-slicing ensures fair CPU time despite run length [OK]
- Assuming longer running tasks get more CPU time
- Thinking tasks can starve others with longer runs
- Believing task creation order controls CPU time
Ready to prove it?
Pass the test and this pattern moves unknown
