📖 Scenario: You are building a simple embedded system that needs to perform an action repeatedly after a delay. To do this, you will use FreeRTOS software timers to start and stop timed events.
🎯 Goal: Create a FreeRTOS software timer, start it, stop it, and print messages to show the timer's state changes.
📋 What You'll Learn
Create a FreeRTOS software timer named xTimer with a period of 1000 milliseconds
Create a variable timerStarted to track if the timer is running
Start the timer using xTimerStart
Stop the timer using xTimerStop
Print messages to show when the timer starts and stops
💡 Why This Matters
🌍 Real World
Embedded systems often need to perform tasks repeatedly or after delays, such as blinking LEDs or reading sensors. FreeRTOS timers help manage these timed events efficiently.
💼 Career
Understanding how to start and stop timers in FreeRTOS is essential for embedded software developers working on real-time applications like IoT devices, automotive systems, and industrial controllers.
Progress0 / 4 steps
1
Create the FreeRTOS software timer
Create a FreeRTOS software timer called xTimer with a period of 1000 milliseconds (1 second). Use xTimerCreate with the name "Timer1", auto-reload set to pdTRUE, and no timer ID (NULL).
FreeRTOS
Hint
Use xTimerCreate with the exact parameters: name "Timer1", period 1000 ms converted with pdMS_TO_TICKS, auto-reload pdTRUE, and NULL for timer ID and callback.
2
Create a variable to track timer state
Create a variable called timerStarted of type BaseType_t and set it to pdFALSE to track if the timer is running.
FreeRTOS
Hint
Declare timerStarted as BaseType_t and initialize it to pdFALSE.
3
Start the timer and update the state variable
Use xTimerStart to start xTimer with a block time of 0. If the timer starts successfully (return value == pdPASS), set timerStarted to pdTRUE.
FreeRTOS
Hint
Call xTimerStart(xTimer, 0) and check if it returns pdPASS. If yes, set timerStarted to pdTRUE.
4
Stop the timer and print status messages
Use xTimerStop to stop xTimer with a block time of 0. If the timer stops successfully (return value == pdPASS), set timerStarted to pdFALSE. Then print "Timer started" if timerStarted is pdTRUE, else print "Timer stopped".
FreeRTOS
Hint
Call xTimerStop(xTimer, 0) and check if it returns pdPASS. If yes, set timerStarted to pdFALSE. Then print "Timer started" or "Timer stopped" based on timerStarted.
Practice
(1/5)
1. What does the function xTimerCreate do in FreeRTOS?
easy
A. Creates a timer but does not start it automatically
B. Starts a timer immediately after creation
C. Stops a running timer
D. Deletes a timer permanently
Solution
Step 1: Understand the purpose of xTimerCreate
This function is used to create a software timer in FreeRTOS but it does not start the timer automatically.
Step 2: Differentiate from other timer functions
Starting a timer requires xTimerStart, stopping requires xTimerStop, and deleting requires xTimerDelete.
Final Answer:
Creates a timer but does not start it automatically -> Option A
Quick Check:
xTimerCreate only creates timer [OK]
Hint: Remember: create ≠ start; start needs separate call [OK]
Common Mistakes:
Thinking xTimerCreate starts the timer automatically
Confusing xTimerStart with creation
Assuming timer is running immediately after creation
2. Which of the following is the correct way to start a FreeRTOS timer named xTimer?
easy
A. xTimerDelete(xTimer, 0);
B. xTimerCreate(xTimer, 0);
C. xTimerStop(xTimer, 0);
D. xTimerStart(xTimer, 0);
Solution
Step 1: Identify the function to start a timer
The function xTimerStart is used to start a timer in FreeRTOS.
Step 2: Check the syntax
The correct syntax is xTimerStart(xTimer, 0); where the second parameter is the block time.
Final Answer:
xTimerStart(xTimer, 0); -> Option D
Quick Check:
Start timer = xTimerStart call [OK]
Hint: Start timers with xTimerStart, not create or stop [OK]
Common Mistakes:
Using xTimerCreate to start a timer
Confusing stop and delete functions with start
Missing the block time parameter
3. Given the following code snippet, what will be the output if the timer callback increments a counter each time it runs and the timer is started and stopped immediately?
A. The block time parameter in xTimerStop is too large
B. The timer was never started before stopping
C. The timer handle is NULL
D. The timer period is set incorrectly
Solution
Step 1: Check timer lifecycle
The timer is created but never started before calling xTimerStop.
Step 2: Understand stopping a timer
Stopping a timer that is not running has no effect and may cause unexpected behavior.
Final Answer:
The timer was never started before stopping -> Option B
Quick Check:
Stop requires running timer first [OK]
Hint: Always start timer before stopping it [OK]
Common Mistakes:
Stopping timer without starting it
Assuming block time causes error
Misunderstanding timer handle validity
5. You want to create a periodic timer in FreeRTOS that starts automatically and stops after 5 executions. Which approach correctly achieves this behavior?
hard
A. Create the timer with pdTRUE, start it automatically by xTimerCreate, and delete after 5 executions
B. Create the timer with pdFALSE, start it manually, and stop it after 5 seconds
C. Create the timer with pdTRUE for auto-reload, start it manually, and in the callback count executions and stop after 5
D. Create the timer with pdFALSE, start it automatically, and restart it 5 times
Solution
Step 1: Understand timer creation parameters
Setting pdTRUE makes the timer periodic (auto-reload), but it does not start automatically; you must call xTimerStart.
Step 2: Implement stopping after 5 executions
Use a counter inside the callback function to track executions and call xTimerStop after the 5th execution.
Final Answer:
Create the timer with pdTRUE for auto-reload, start it manually, and in the callback count executions and stop after 5 -> Option C