Bird
Raised Fist0
FreeRTOSprogramming~5 mins

Tick timer and scheduler in FreeRTOS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the role of the tick timer in FreeRTOS?
The tick timer generates regular interrupts at a fixed frequency. These interrupts allow FreeRTOS to keep track of time and manage task switching.
Click to reveal answer
beginner
How does the FreeRTOS scheduler decide which task to run next?
The scheduler selects the highest priority task that is ready to run. If multiple tasks have the same priority, it uses time slicing or round-robin to share CPU time.
Click to reveal answer
intermediate
What happens during a tick interrupt in FreeRTOS?
During a tick interrupt, FreeRTOS updates its internal tick count and checks if any tasks need to be switched based on their state and priority.
Click to reveal answer
intermediate
Why is the tick rate important in FreeRTOS?
The tick rate determines how often the scheduler runs and how precise timing functions are. A higher tick rate means more frequent task switching but more CPU overhead.
Click to reveal answer
intermediate
Explain the difference between preemptive and cooperative scheduling in FreeRTOS.
Preemptive scheduling allows the scheduler to interrupt a running task to switch to a higher priority task. Cooperative scheduling requires tasks to yield control voluntarily.
Click to reveal answer
What triggers the FreeRTOS scheduler to run?
AA button press
BA tick timer interrupt
CA network packet arrival
DA manual function call only
What does the tick timer frequency affect?
AThe CPU clock speed
BThe size of the memory
CThe number of tasks allowed
DHow often tasks can be switched
In preemptive scheduling, when can a task be interrupted?
AOnly when it finishes
BOnly when it yields
CWhen a higher priority task becomes ready
DNever
What is the main purpose of the FreeRTOS scheduler?
ATo decide which task runs and when
BTo manage memory allocation
CTo handle input/output devices
DTo compile code
What happens if the tick rate is set too high?
ACPU overhead increases due to frequent interrupts
BTasks run slower
CMemory usage decreases
DScheduler stops working
Describe how the tick timer and scheduler work together in FreeRTOS to manage tasks.
Think about what happens every time the tick timer interrupts.
You got /4 concepts.
    Explain the difference between preemptive and cooperative scheduling in FreeRTOS and how the tick timer affects them.
    Consider how tasks lose control in each scheduling type.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main role of the tick timer in FreeRTOS?
      easy
      A. To handle input/output operations
      B. To store task priorities
      C. To allocate memory for tasks
      D. To count time in small steps called ticks

      Solution

      1. Step 1: Understand tick timer function

        The tick timer counts time in small units called ticks, which are the basic time measurement in FreeRTOS.
      2. Step 2: Differentiate from other functions

        Other options like storing priorities or handling I/O are not related to the tick timer's role.
      3. Final Answer:

        To count time in small steps called ticks -> Option D
      4. Quick Check:

        Tick timer = counts ticks [OK]
      Hint: Tick timer counts time steps, not priorities or memory [OK]
      Common Mistakes:
      • Confusing tick timer with task priority management
      • Thinking tick timer handles memory or I/O
      • Mixing tick timer with scheduler directly
      2. Which of the following is the correct way to delay a task for 100 ticks in FreeRTOS?
      easy
      A. xTaskDelay(100);
      B. vTaskDelay(1000);
      C. vTaskDelay(100);
      D. delayTask(100);

      Solution

      1. Step 1: Identify correct function name

        The correct FreeRTOS function to delay a task is vTaskDelay().
      2. Step 2: Check parameter correctness

        The parameter is the number of ticks to delay. For 100 ticks, vTaskDelay(100); is correct.
      3. Final Answer:

        vTaskDelay(100); -> Option C
      4. Quick Check:

        Delay task = vTaskDelay(ticks) [OK]
      Hint: Use vTaskDelay with tick count to pause tasks [OK]
      Common Mistakes:
      • Using wrong function name like xTaskDelay or delayTask
      • Passing milliseconds instead of ticks
      • Using too large or incorrect delay values
      3. Consider this code snippet in FreeRTOS:
      TickType_t start = xTaskGetTickCount();
      vTaskDelay(50);
      TickType_t end = xTaskGetTickCount();
      TickType_t diff = end - start;
      What is the expected value of diff?
      medium
      A. 0
      B. 50
      C. 100
      D. Depends on task priority

      Solution

      1. Step 1: Understand xTaskGetTickCount()

        This function returns the current tick count since the scheduler started.
      2. Step 2: Analyze vTaskDelay(50)

        The task delays itself for 50 ticks, so the tick count advances by 50 during the delay.
      3. Step 3: Calculate difference

        Subtracting start from end gives the delay duration, which should be 50 ticks.
      4. Final Answer:

        50 -> Option B
      5. Quick Check:

        Delay ticks = 50 [OK]
      Hint: Delay of 50 ticks means tick count difference is 50 [OK]
      Common Mistakes:
      • Assuming delay is zero or doubled
      • Thinking task priority affects tick count difference
      • Confusing ticks with milliseconds
      4. What is wrong with this FreeRTOS code snippet?
      vTaskDelay(0);
      TickType_t ticks = xTaskGetTickCount();
      medium
      A. vTaskDelay(0) does not delay the task
      B. xTaskGetTickCount() returns an error
      C. vTaskDelay requires a pointer argument
      D. TickType_t is not a valid type

      Solution

      1. Step 1: Check vTaskDelay parameter

        Passing 0 to vTaskDelay means no delay; the task yields but continues immediately.
      2. Step 2: Verify xTaskGetTickCount()

        This function correctly returns the current tick count; no error here.
      3. Final Answer:

        vTaskDelay(0) does not delay the task -> Option A
      4. Quick Check:

        Delay(0) means no wait [OK]
      Hint: vTaskDelay(0) yields but does not pause task [OK]
      Common Mistakes:
      • Expecting delay with zero ticks
      • Thinking xTaskGetTickCount returns error
      • Misunderstanding TickType_t type
      5. You want a task to run every 200 ticks precisely using FreeRTOS. Which approach ensures this timing despite task execution time?
      hard
      A. Use vTaskDelayUntil() with a previous wake time variable
      B. Use vTaskDelay(200) at the end of the task loop
      C. Use xTaskGetTickCount() inside the task and delay manually
      D. Use vTaskDelay(100) twice in the task loop

      Solution

      1. Step 1: Understand vTaskDelay() limitation

        Using vTaskDelay(200) delays from current time, so task execution time adds up causing drift.
      2. Step 2: Use vTaskDelayUntil() for fixed periodic timing

        vTaskDelayUntil() uses a previous wake time to maintain exact periodic intervals regardless of execution time.
      3. Step 3: Evaluate other options

        Manual delay or multiple delays do not guarantee precise timing; only vTaskDelayUntil() does.
      4. Final Answer:

        Use vTaskDelayUntil() with a previous wake time variable -> Option A
      5. Quick Check:

        Precise periodic task = vTaskDelayUntil() [OK]
      Hint: Use vTaskDelayUntil() for exact periodic task timing [OK]
      Common Mistakes:
      • Using vTaskDelay causes timing drift
      • Trying manual delay calculations
      • Ignoring task execution time 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