📖 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
Step 1: Understand timer functionality in FreeRTOS
Timers in FreeRTOS are designed to call a function repeatedly or once after a delay.
Step 2: Relate to periodic status reporting
Periodic status reporting requires running code repeatedly at fixed intervals, which timers enable.
Final Answer:
To run a function repeatedly at fixed time intervals -> Option C
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
Step 1: Identify correct period conversion
FreeRTOS timers use ticks, so pdMS_TO_TICKS(1000) converts 1000 ms to ticks correctly.
Step 2: Check auto-reload parameter
pdTRUE enables auto-reload for periodic timers, which is needed here.
Final Answer:
xTimerCreate("statusTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, TimerCallback); -> Option A
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?
C. Auto-reload parameter must be pdFALSE for periodic timers
D. Timer period should be converted to ticks using pdMS_TO_TICKS
Solution
Step 1: Check timer period parameter
The period is given as 1000 (milliseconds) but FreeRTOS expects ticks, so pdMS_TO_TICKS is needed.
Step 2: Verify other parameters
The timer name as string is allowed, auto-reload pdTRUE is correct, and callback is assumed defined.
Final Answer:
Timer period should be converted to ticks using pdMS_TO_TICKS -> Option D
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
Step 1: Understand timer types and requirements
Auto-reload timers run repeatedly; one-shot timers run once. We need repeated calls every 2 seconds.
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.
Final Answer:
Create an auto-reload timer with 2-second period and count executions in callback, then stop timer after 5 times -> Option B
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 unknownstrongwhile earning +1 Grip toward your certificate.