Bird
Raised Fist0
FreeRTOSprogramming~20 mins

Timer for periodic status reporting in FreeRTOS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
FreeRTOS Timer Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this FreeRTOS timer callback?
Consider a FreeRTOS software timer set to trigger every 1000 ms. The callback function increments a counter and prints it. What will be printed after the timer triggers 3 times?
FreeRTOS
static int count = 0;

void vTimerCallback(TimerHandle_t xTimer) {
    count++;
    printf("Count: %d\n", count);
}

// Timer created with xTimerCreate("StatusTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, vTimerCallback);
// Timer started with xTimerStart(timer, 0);
ACount: 0\nCount: 1\nCount: 2\n
BNo output because timer callback is not called
CCount: 3\nCount: 3\nCount: 3\n
DCount: 1\nCount: 2\nCount: 3\n
Attempts:
2 left
💡 Hint
Remember the timer callback increments the count each time it runs.
🧠 Conceptual
intermediate
1:30remaining
Which FreeRTOS timer type is best for periodic status reporting?
You want to report system status every 5 seconds automatically. Which timer type should you use in FreeRTOS?
ATask delay with vTaskDelay(5000)
BPeriodic timer that triggers every 5 seconds
CHardware timer interrupt
DOne-shot timer that triggers once after 5 seconds
Attempts:
2 left
💡 Hint
Think about repeating actions without manual restart.
🔧 Debug
advanced
2:30remaining
Why does this FreeRTOS timer callback not print anything?
Given this code snippet, why is there no output from the timer callback?
FreeRTOS
void vTimerCallback(TimerHandle_t xTimer) {
    printf("Timer triggered\n");
}

void main() {
    TimerHandle_t timer = xTimerCreate("MyTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, vTimerCallback);
    // Missing xTimerStart call
    vTaskStartScheduler();
}
AThe timer was never started with xTimerStart, so callback never runs
BThe callback function has a syntax error and does not compile
CThe timer period is zero, so it never triggers
DThe scheduler was not started, so no tasks run
Attempts:
2 left
💡 Hint
Check if the timer was activated after creation.
📝 Syntax
advanced
1:30remaining
Identify the syntax error in this FreeRTOS timer callback declaration
Which option contains the correct syntax for a FreeRTOS timer callback function?
Aint vTimerCallback(TimerHandle_t xTimer) { /* code */ }
Bvoid vTimerCallback(void xTimer) { /* code */ }
Cvoid vTimerCallback(TimerHandle_t xTimer) { /* code */ }
Dvoid vTimerCallback(TimerHandle xTimer) { /* code */ }
Attempts:
2 left
💡 Hint
Check the parameter type and return type required by FreeRTOS.
🚀 Application
expert
3:00remaining
How to safely update a shared variable in a FreeRTOS timer callback?
You have a global variable 'statusCount' updated in a timer callback and read in a task. How should you protect 'statusCount' to avoid data corruption?
FreeRTOS
volatile int statusCount = 0;

void vTimerCallback(TimerHandle_t xTimer) {
    statusCount++;
}

void vStatusTask(void *pvParameters) {
    while(1) {
        printf("Status count: %d\n", statusCount);
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}
AUse a mutex or critical section around accesses to 'statusCount'
BDeclare 'statusCount' as volatile and do nothing else
CDisable interrupts globally when reading or writing 'statusCount'
DUse a local copy of 'statusCount' in the task without synchronization
Attempts:
2 left
💡 Hint
Think about how to prevent race conditions when multiple contexts access the same variable.

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