Bird
Raised Fist0
Embedded Cprogramming~20 mins

Watchdog reset recovery in Embedded C - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Watchdog Reset Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Watchdog Reset Cause Detection
What will be the output of this embedded C code snippet that checks the cause of the last reset?
Embedded C
#include <stdio.h>
#define WDT_RESET_FLAG 0x01
#define POWER_ON_RESET_FLAG 0x02

unsigned char reset_cause = WDT_RESET_FLAG;

int main() {
    if (reset_cause & WDT_RESET_FLAG) {
        printf("Watchdog Reset Detected\n");
    } else if (reset_cause & POWER_ON_RESET_FLAG) {
        printf("Power-On Reset Detected\n");
    } else {
        printf("Unknown Reset Cause\n");
    }
    return 0;
}
AWatchdog Reset Detected
BPower-On Reset Detected
CUnknown Reset Cause
DCompilation Error
Attempts:
2 left
💡 Hint
Check which reset flag is set in the reset_cause variable.
🧠 Conceptual
intermediate
1:30remaining
Purpose of Watchdog Reset Recovery Code
Why is it important to include watchdog reset recovery code in embedded systems?
ATo increase the clock speed of the microcontroller
BTo detect and handle system hangs by resetting the system safely
CTo reduce power consumption during sleep mode
DTo enable communication with external sensors
Attempts:
2 left
💡 Hint
Think about what a watchdog timer does when the system stops responding.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Watchdog Reset Handling
What is the bug in this watchdog reset recovery code snippet?
Embedded C
void check_reset_cause() {
    if (reset_cause == WDT_RESET_FLAG) {
        // Handle watchdog reset
        reset_cause = 0;
    }
}
AThe assignment operator '=' is used instead of comparison '==' in the if condition
BThe reset_cause variable is not declared
CThe reset_cause flag is cleared before handling the reset
DThe function does not return a value
Attempts:
2 left
💡 Hint
Check the condition inside the if statement carefully.
📝 Syntax
advanced
1:30remaining
Correct Syntax for Clearing Watchdog Reset Flag
Which option correctly clears the watchdog reset flag in a hardware register named RESET_FLAGS?
Embedded C
/* Assume RESET_FLAGS is a hardware register where bit 0 is the watchdog reset flag */
ARESET_FLAGS == ~0x01;
BRESET_FLAGS = &~0x01;
CRESET_FLAGS |= 0x01;
DRESET_FLAGS &= ~0x01;
Attempts:
2 left
💡 Hint
To clear a bit, you use bitwise AND with the inverse mask.
🚀 Application
expert
3:00remaining
Implement Watchdog Reset Recovery Logic
Given a microcontroller with a watchdog reset flag at bit 2 of the RESET_STATUS register, write the correct embedded C code snippet to detect a watchdog reset, clear the flag, and print "Recovered from watchdog reset".
A
if (RESET_STATUS &amp; (1 &lt;&lt; 2)) {
    RESET_STATUS |= (1 &lt;&lt; 2);
    printf("Recovered from watchdog reset\n");
}
B
if (RESET_STATUS == (1 &lt;&lt; 2)) {
    RESET_STATUS |= (1 &lt;&lt; 2);
    printf("Recovered from watchdog reset\n");
}
C
if (RESET_STATUS &amp; (1 &lt;&lt; 2)) {
    RESET_STATUS &amp;= ~(1 &lt;&lt; 2);
    printf("Recovered from watchdog reset\n");
}
D
if (RESET_STATUS = (1 &lt;&lt; 2)) {
    RESET_STATUS &amp;= ~(1 &lt;&lt; 2);
    printf("Recovered from watchdog reset\n");
}
Attempts:
2 left
💡 Hint
Use bitwise AND to check the flag and bitwise AND with complement to clear it.

Practice

(1/5)
1.

What is the main purpose of checking the watchdog reset flag at system startup?

easy
A. To increase the watchdog timer interval
B. To disable the watchdog timer permanently
C. To detect if the system was restarted due to a watchdog timeout
D. To reset all system variables to zero

Solution

  1. Step 1: Understand watchdog reset flag role

    The watchdog reset flag indicates if the last reset was caused by the watchdog timer expiring.
  2. Step 2: Purpose of checking the flag at startup

    Checking this flag helps the program know if it needs to perform recovery actions after an unexpected reset.
  3. Final Answer:

    To detect if the system was restarted due to a watchdog timeout -> Option C
  4. Quick Check:

    Watchdog reset flag = detect watchdog reset [OK]
Hint: Watchdog flag shows if reset was watchdog-caused [OK]
Common Mistakes:
  • Thinking the flag disables the watchdog
  • Assuming it resets variables automatically
  • Confusing flag with timer interval setting
2.

Which of the following code snippets correctly clears the watchdog reset flag in embedded C?

/* Assume WDT_RESET_FLAG is the flag variable */
// Clear the flag
?
easy
A. WDT_RESET_FLAG = 0;
B. clear(WDT_RESET_FLAG);
C. WDT_RESET_FLAG == 0;
D. reset_flag(WDT_RESET_FLAG);

Solution

  1. Step 1: Identify correct syntax to clear a flag

    In embedded C, clearing a flag usually means setting its variable to zero.
  2. Step 2: Analyze each option

    WDT_RESET_FLAG = 0; sets the flag to 0, which clears it. clear(WDT_RESET_FLAG); uses a non-standard function. WDT_RESET_FLAG == 0; uses comparison, not assignment. reset_flag(WDT_RESET_FLAG); uses an undefined function.
  3. Final Answer:

    WDT_RESET_FLAG = 0; -> Option A
  4. Quick Check:

    Clear flag = set to 0 [OK]
Hint: Clear flags by assigning zero directly [OK]
Common Mistakes:
  • Using comparison operator '==' instead of assignment
  • Calling undefined functions to clear flags
  • Confusing clearing with resetting the whole system
3.

Consider the following code snippet that runs at system startup:

if (WDT_RESET_FLAG) {
    recover_from_watchdog();
    WDT_RESET_FLAG = 0;
} else {
    normal_startup();
}

What will happen if the system was reset by the watchdog timer?

medium
A. The system does nothing and hangs
B. The system calls recover_from_watchdog() and clears the flag
C. The system calls normal_startup() only
D. The system resets again immediately

Solution

  1. Step 1: Check condition when watchdog reset flag is set

    If WDT_RESET_FLAG is true (non-zero), the if block executes.
  2. Step 2: Follow code logic inside the if block

    The function recover_from_watchdog() is called, then the flag is cleared by setting it to zero.
  3. Final Answer:

    The system calls recover_from_watchdog() and clears the flag -> Option B
  4. Quick Check:

    Flag set = recover and clear flag [OK]
Hint: If flag set, run recovery then clear flag [OK]
Common Mistakes:
  • Assuming normal_startup() runs after watchdog reset
  • Thinking system hangs without recovery
  • Believing system resets again immediately
4.

Identify the error in this watchdog reset recovery code snippet:

if (WDT_RESET_FLAG = 1) {
    recover_from_watchdog();
    WDT_RESET_FLAG = 0;
}
medium
A. Using assignment '=' instead of comparison '==' in the if condition
B. Not clearing the flag after recovery
C. Calling recover_from_watchdog() before checking the flag
D. Missing semicolon after the if statement

Solution

  1. Step 1: Analyze the if condition syntax

    The condition uses '=' which assigns 1 to the flag instead of comparing it.
  2. Step 2: Understand the impact of assignment in condition

    Assignment always returns true, so the if block runs every time, ignoring actual flag state.
  3. Final Answer:

    Using assignment '=' instead of comparison '==' in the if condition -> Option A
  4. Quick Check:

    Use '==' for comparison in if conditions [OK]
Hint: Use '==' in if conditions, not '=' [OK]
Common Mistakes:
  • Confusing '=' (assign) with '==' (compare)
  • Forgetting to clear the flag after recovery
  • Misplacing semicolons inside if statements
5.

You want to implement a watchdog reset recovery that logs the reset cause and safely restarts the system only if the reset was caused by the watchdog. Which sequence of actions is correct?

hard
A. Clear watchdog reset flag, restart system, then log reset cause
B. Log reset cause only if watchdog reset flag is not set
C. Restart system immediately, then check and clear watchdog reset flag
D. Check watchdog reset flag, log reset cause, clear flag, then restart system

Solution

  1. Step 1: Check the watchdog reset flag at startup

    This tells if the reset was caused by the watchdog timer.
  2. Step 2: Log the reset cause and clear the flag before restarting

    Logging helps diagnose issues; clearing the flag prevents repeated recovery loops.
  3. Step 3: Restart the system safely after handling the flag

    This ensures the system restarts only after recovery steps are done.
  4. Final Answer:

    Check watchdog reset flag, log reset cause, clear flag, then restart system -> Option D
  5. Quick Check:

    Check flag -> log -> clear -> restart [OK]
Hint: Always check flag before logging and restarting [OK]
Common Mistakes:
  • Restarting before clearing the flag
  • Logging after restart (won't execute)
  • Ignoring the flag and restarting blindly
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