Bird
Raised Fist0
FreeRTOSprogramming~30 mins

Timer for periodic status reporting in FreeRTOS - Mini Project: Build & Apply

Choose your learning style10 modes available
Timer for periodic status reporting
📖 Scenario: You are building a simple embedded system that needs to report its status every few seconds. To do this, you will use a FreeRTOS timer that triggers a function periodically.
🎯 Goal: Create a FreeRTOS timer that calls a status reporting function every 2 seconds.
📋 What You'll Learn
Create a FreeRTOS software timer named statusTimer with a 2-second period
Create a callback function named vStatusReportCallback that prints "Status: OK"
Start the timer after creation
Print the status message each time the timer callback runs
💡 Why This Matters
🌍 Real World
Periodic status reporting is common in embedded systems to monitor device health or send heartbeat signals.
💼 Career
Understanding FreeRTOS timers is essential for embedded software engineers working on real-time systems.
Progress0 / 4 steps
1
Create the status reporting callback function
Write a function called vStatusReportCallback that takes a TimerHandle_t xTimer parameter and prints the text "Status: OK" using printf.
FreeRTOS
Hint

Use void vStatusReportCallback(TimerHandle_t xTimer) as the function signature and printf("Status: OK\n") inside it.

2
Create the FreeRTOS timer
Create a FreeRTOS software timer named statusTimer using xTimerCreate with the following parameters: name "StatusTimer", period of 2000 milliseconds converted to ticks using pdMS_TO_TICKS(2000), auto-reload set to pdTRUE, timer ID set to NULL, and callback function vStatusReportCallback.
FreeRTOS
Hint

Use xTimerCreate with the exact parameters: name "StatusTimer", period pdMS_TO_TICKS(2000), auto-reload pdTRUE, ID NULL, and callback vStatusReportCallback.

3
Start the timer
Start the timer statusTimer by calling xTimerStart with the timer handle and a block time of 0.
FreeRTOS
Hint

Call xTimerStart(statusTimer, 0); inside your main function or setup code.

4
Print status messages periodically
Add a simple infinite loop with vTaskDelay inside main to keep the program running so the timer can print "Status: OK" every 2 seconds. Use vTaskDelay(pdMS_TO_TICKS(1000)) inside the loop. Then print "Timer started" once before the loop.
FreeRTOS
Hint

Print "Timer started" once, then keep the program alive with an infinite loop calling vTaskDelay(pdMS_TO_TICKS(1000)). The timer callback will print "Status: OK" every 2 seconds.

Practice

(1/5)
1. What is the main purpose of using a timer in FreeRTOS for periodic status reporting?
easy
A. To pause the entire system for a set time
B. To create a new task that runs forever
C. To run a function repeatedly at fixed time intervals
D. To allocate memory dynamically for tasks

Solution

  1. Step 1: Understand timer functionality in FreeRTOS

    Timers in FreeRTOS are designed to call a function repeatedly or once after a delay.
  2. Step 2: Relate to periodic status reporting

    Periodic status reporting requires running code repeatedly at fixed intervals, which timers enable.
  3. Final Answer:

    To run a function repeatedly at fixed time intervals -> Option C
  4. Quick Check:

    Timer = repeated function calls [OK]
Hint: Timers run code repeatedly at set intervals [OK]
Common Mistakes:
  • Confusing timers with tasks
  • Thinking timers pause the system
  • Assuming timers allocate memory
2. Which of the following is the correct way to create a FreeRTOS timer named statusTimer with a 1000 ms period and auto-reload enabled?
easy
A. xTimerCreate("statusTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, TimerCallback);
B. xTimerCreate("statusTimer", 1000, pdFALSE, NULL, TimerCallback);
C. xTimerCreate("statusTimer", pdMS_TO_TICKS(1000), pdFALSE, NULL, TimerCallback);
D. xTimerCreate("statusTimer", 1000, pdTRUE, NULL, TimerCallback);

Solution

  1. Step 1: Identify correct period conversion

    FreeRTOS timers use ticks, so pdMS_TO_TICKS(1000) converts 1000 ms to ticks correctly.
  2. Step 2: Check auto-reload parameter

    pdTRUE enables auto-reload for periodic timers, which is needed here.
  3. Final Answer:

    xTimerCreate("statusTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, TimerCallback); -> Option A
  4. Quick Check:

    Use pdMS_TO_TICKS and pdTRUE for periodic timers [OK]
Hint: Use pdMS_TO_TICKS for ms and pdTRUE for auto-reload [OK]
Common Mistakes:
  • Using raw milliseconds instead of ticks
  • Setting auto-reload to pdFALSE for periodic timer
  • Confusing pdTRUE and pdFALSE values
3. Given the code snippet below, what will be printed every second?
void TimerCallback(TimerHandle_t xTimer) {
    printf("Status: OK\n");
}

int main() {
    TimerHandle_t statusTimer = xTimerCreate("statusTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, TimerCallback);
    xTimerStart(statusTimer, 0);
    vTaskStartScheduler();
    return 0;
}
medium
A. Status: OK printed every second repeatedly
B. Status: OK printed once after 1 second
C. No output because timer is not started
D. Compilation error due to missing parameters

Solution

  1. Step 1: Analyze timer creation and start

    The timer is created with pdTRUE for auto-reload and started immediately, so it runs repeatedly.
  2. Step 2: Understand callback behavior

    The callback prints "Status: OK" each time the timer expires, which is every 1000 ms (1 second).
  3. Final Answer:

    Status: OK printed every second repeatedly -> Option A
  4. Quick Check:

    Auto-reload timer prints every second [OK]
Hint: Auto-reload timers call callback repeatedly [OK]
Common Mistakes:
  • Assuming timer runs only once
  • Forgetting to start the timer
  • Confusing callback parameters
4. Identify the error in the following FreeRTOS timer code snippet:
TimerHandle_t statusTimer = xTimerCreate("statusTimer", 1000, pdTRUE, NULL, TimerCallback);
xTimerStart(statusTimer, 0);
medium
A. Timer callback function is missing
B. Timer name must be NULL, not a string
C. Auto-reload parameter must be pdFALSE for periodic timers
D. Timer period should be converted to ticks using pdMS_TO_TICKS

Solution

  1. Step 1: Check timer period parameter

    The period is given as 1000 (milliseconds) but FreeRTOS expects ticks, so pdMS_TO_TICKS is needed.
  2. Step 2: Verify other parameters

    The timer name as string is allowed, auto-reload pdTRUE is correct, and callback is assumed defined.
  3. Final Answer:

    Timer period should be converted to ticks using pdMS_TO_TICKS -> Option D
  4. Quick Check:

    Always convert ms to ticks with pdMS_TO_TICKS [OK]
Hint: Always convert ms to ticks with pdMS_TO_TICKS [OK]
Common Mistakes:
  • Passing raw milliseconds instead of ticks
  • Confusing auto-reload true/false
  • Assuming timer name must be NULL
5. You want to implement a FreeRTOS timer that reports system status every 2 seconds but only for 5 times, then stops automatically. Which approach correctly achieves this?
hard
A. Create a one-shot timer with 2-second period and restart it manually 5 times in callback
B. Create an auto-reload timer with 2-second period and count executions in callback, then stop timer after 5 times
C. Create an auto-reload timer with 10-second period and print status every 2 seconds inside callback
D. Create a one-shot timer with 10-second period and start it 5 times in a loop

Solution

  1. Step 1: Understand timer types and requirements

    Auto-reload timers run repeatedly; one-shot timers run once. We need repeated calls every 2 seconds.
  2. Step 2: Implement counting and stopping logic

    Use an auto-reload timer with 2-second period, count callback calls, and stop timer after 5 executions.
  3. Final Answer:

    Create an auto-reload timer with 2-second period and count executions in callback, then stop timer after 5 times -> Option B
  4. Quick Check:

    Auto-reload + count + stop after 5 [OK]
Hint: Use auto-reload timer and stop after count in callback [OK]
Common Mistakes:
  • Using one-shot timer without manual restarts
  • Incorrect timer period causing wrong intervals
  • Not stopping timer after desired count
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