Bird
Raised Fist0
FreeRTOSprogramming~10 mins

Timer for periodic status reporting in FreeRTOS - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a FreeRTOS timer named 'statusTimer'.

FreeRTOS
TimerHandle_t statusTimer = xTimerCreate("StatusTimer", [1], pdTRUE, NULL, vStatusCallback);
Drag options to blanks, or click blank then click option'
ANULL
B1000
CpdFALSE
DpdMS_TO_TICKS(1000)
Attempts:
3 left
💡 Hint
Common Mistakes
Using raw milliseconds instead of ticks
Setting the timer to not auto-reload
2fill in blank
medium

Complete the code to start the timer 'statusTimer' with no block time.

FreeRTOS
xTimerStart(statusTimer, [1]);
Drag options to blanks, or click blank then click option'
AportMAX_DELAY
B0
CpdFALSE
DpdMS_TO_TICKS(100)
Attempts:
3 left
💡 Hint
Common Mistakes
Using portMAX_DELAY which blocks indefinitely
Using pdFALSE which is not a valid block time
3fill in blank
hard

Fix the error in the timer callback function prototype.

FreeRTOS
void [1](TimerHandle_t xTimer) {
    // Status reporting code here
}
Drag options to blanks, or click blank then click option'
AvStatusCallback
BStatusCallback
CvStatusCallBack
DstatusCallback
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect capitalization
Using a different function name than the timer creation
4fill in blank
hard

Fill both blanks to create a periodic timer and check if it was created successfully.

FreeRTOS
TimerHandle_t statusTimer = xTimerCreate("StatusTimer", [1], [2], NULL, vStatusCallback);
if (statusTimer == NULL) {
    // Handle error
}
Drag options to blanks, or click blank then click option'
ApdMS_TO_TICKS(2000)
BpdFALSE
CpdTRUE
DNULL
Attempts:
3 left
💡 Hint
Common Mistakes
Using pdFALSE which creates a one-shot timer
Not converting milliseconds to ticks
5fill in blank
hard

Fill all three blanks to stop the timer safely and delete it.

FreeRTOS
if (xTimerStop(statusTimer, [1]) == pdPASS) {
    xTimerDelete(statusTimer, [2]);
    statusTimer = [3];
}
Drag options to blanks, or click blank then click option'
AportMAX_DELAY
B0
CNULL
DpdFALSE
Attempts:
3 left
💡 Hint
Common Mistakes
Using blocking calls unnecessarily
Not setting the timer handle to NULL after deletion

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