Bird
Raised Fist0
Embedded Cprogramming~10 mins

Wake-up sources configuration in Embedded C - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Wake-up sources configuration
Start system in low power mode
↓
Configure wake-up sources
↓
Enable interrupts or events
↓
System sleeps
↓
Wake-up event detected?
No→Continue sleeping
Yes↓
Exit low power mode
↓
Resume normal operation
The system configures which events can wake it up, then sleeps until one occurs, then resumes normal operation.
Execution Sample
Embedded C
void configure_wakeup() {
  enable_wakeup_pin();
  enable_wakeup_timer();
  enter_low_power_mode();
}
This code sets up pin and timer as wake-up sources, then puts the system to sleep.
Execution Table
StepActionWake-up Pin EnabledWake-up Timer EnabledSystem State
1Start configurationNoNoActive
2Enable wake-up pinYesNoActive
3Enable wake-up timerYesYesActive
4Enter low power modeYesYesSleeping
5Wake-up event detected (pin)YesYesWake-up triggered
6Exit low power modeYesYesActive
💡 Wake-up event detected, system exits low power mode and resumes operation
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 6
Wake-up Pin EnabledNoYesYesYesYes
Wake-up Timer EnabledNoNoYesYesYes
System StateActiveActiveActiveSleepingActive
Key Moments - 2 Insights
Why does the system stay in 'Sleeping' state after enabling wake-up sources?
Because enabling wake-up sources only prepares the system; it enters low power mode only after calling enter_low_power_mode() as shown in step 4.
What triggers the system to exit low power mode?
A wake-up event such as a pin change or timer interrupt triggers exit, as shown in step 5 where the system detects the event and wakes up.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step does the system enter low power mode?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Check the 'System State' column for when it changes to 'Sleeping'
According to variable_tracker, what is the state of 'Wake-up Timer Enabled' after step 2?
ANo
BYes
CUnknown
DSleeping
💡 Hint
Look at the 'Wake-up Timer Enabled' row under 'After Step 2' column
If the wake-up pin was not enabled at step 2, what would happen at step 5?
ASystem wakes up normally
BSystem stays sleeping
CSystem crashes
DSystem resets
💡 Hint
Wake-up event depends on enabled sources; see step 5 where pin event triggers wake-up only if enabled
Concept Snapshot
Wake-up sources configuration:
- Enable hardware sources (pins, timers) before sleep
- Call low power mode function to sleep
- System wakes on enabled event
- After wake-up, resume normal operation
- Proper setup avoids missed wake-ups
Full Transcript
This example shows how an embedded system configures wake-up sources like pins and timers before entering low power mode. The system starts active, enables the wake-up pin and timer, then enters sleep. It stays sleeping until a wake-up event occurs, such as a pin change. When the event happens, the system exits low power mode and resumes normal operation. Variables track which sources are enabled and the system state changes from active to sleeping and back. Key points include that enabling sources does not sleep the system immediately, and wake-up events depend on enabled sources. This trace helps beginners see step-by-step how wake-up configuration works in embedded C.

Practice

(1/5)
1. Which of the following is a common wake-up source in embedded C devices?
easy
A. GPIO pin interrupt
B. Floating point calculation
C. String concatenation
D. File system read

Solution

  1. Step 1: Understand wake-up sources

    Wake-up sources are hardware events that can wake a device from sleep mode, such as GPIO interrupts or timers.
  2. Step 2: Identify valid wake-up sources

    GPIO pin interrupts are commonly used as wake-up sources because they detect external signals.
  3. Final Answer:

    GPIO pin interrupt -> Option A
  4. Quick Check:

    Wake-up source = GPIO pin interrupt [OK]
Hint: Wake-up sources are hardware events like GPIO or timers [OK]
Common Mistakes:
  • Confusing software operations with hardware wake-up sources
  • Thinking file operations can wake embedded devices
  • Assuming calculations can trigger wake-up
2. Which syntax correctly enables a GPIO pin as a wake-up source in embedded C?
easy
A. enable_wakeup(GPIO_PIN_5);
B. GPIO_WAKEUP_ENABLE(5);
C. wakeup_enable(GPIO5);
D. set_wakeup_pin(5);

Solution

  1. Step 1: Recognize common embedded C macros

    Macros often use uppercase and underscores, like GPIO_WAKEUP_ENABLE(pin).
  2. Step 2: Match syntax style

    GPIO_WAKEUP_ENABLE(5); matches typical embedded C macro style for enabling wake-up on GPIO pin 5.
  3. Final Answer:

    GPIO_WAKEUP_ENABLE(5); -> Option B
  4. Quick Check:

    Macro style = GPIO_WAKEUP_ENABLE(5) [OK]
Hint: Look for uppercase macro style for hardware config [OK]
Common Mistakes:
  • Using lowercase function names not defined in embedded C
  • Confusing parameter formats
  • Missing parentheses or semicolons
3. What will be the output of the following code snippet?
void configure_wakeup() {
    WAKEUP_ENABLE_TIMER(1000); // 1000 ms
    WAKEUP_ENABLE_GPIO(3);
}

int main() {
    configure_wakeup();
    if (is_wakeup_source(GPIO_3)) {
        printf("Wakeup by GPIO 3\n");
    } else if (is_wakeup_source(TIMER)) {
        printf("Wakeup by Timer\n");
    } else {
        printf("No wakeup source\n");
    }
    return 0;
}
medium
A. Wakeup by GPIO 3
B. Wakeup by Timer
C. No wakeup source
D. Compilation error

Solution

  1. Step 1: Analyze function and macros usage

    The code uses WAKEUP_ENABLE_TIMER and WAKEUP_ENABLE_GPIO macros but does not define or include them, causing compilation errors.
  2. Step 2: Check function calls and conditions

    Functions like is_wakeup_source and constants GPIO_3, TIMER are undefined, leading to compilation failure.
  3. Final Answer:

    Compilation error -> Option D
  4. Quick Check:

    Undefined macros/functions cause compilation error [OK]
Hint: Undefined macros or functions cause compile errors [OK]
Common Mistakes:
  • Assuming macros are predefined without headers
  • Ignoring missing function definitions
  • Confusing runtime output with compile errors
4. Identify the error in this wake-up source configuration code:
void setup_wakeup() {
    WAKEUP_ENABLE_GPIO(2);
    WAKEUP_ENABLE_GPIO(2);
    WAKEUP_ENABLE_TIMER(500);
}
medium
A. Duplicate GPIO wake-up enable causes conflict
B. Timer value 500 is invalid
C. Missing return statement
D. No error, code is correct

Solution

  1. Step 1: Review GPIO wake-up configuration

    The code enables GPIO pin 2 twice, which can cause conflicts or redundant configuration.
  2. Step 2: Check timer configuration and function structure

    Timer value 500 ms is valid; no return needed for void function.
  3. Final Answer:

    Duplicate GPIO wake-up enable causes conflict -> Option A
  4. Quick Check:

    Duplicate GPIO enable = conflict [OK]
Hint: Avoid enabling same GPIO wake-up twice [OK]
Common Mistakes:
  • Thinking timer value is invalid
  • Expecting return in void function
  • Ignoring duplicate hardware config issues
5. You want to configure a device to wake up either by GPIO pin 4 or after 2 seconds using a timer. Which code snippet correctly sets both wake-up sources?
hard
A. WAKEUP_CONFIG(GPIO4 | TIMER_2S);
B. WAKEUP_ENABLE_TIMER(2); WAKEUP_ENABLE_GPIO(4);
C. WAKEUP_ENABLE_GPIO(4); WAKEUP_ENABLE_TIMER(2000);
D. WAKEUP_ENABLE_GPIO(4, 2000);

Solution

  1. Step 1: Understand separate wake-up source configuration

    GPIO and timer wake-up sources are usually enabled with separate calls specifying pin and time in milliseconds.
  2. Step 2: Evaluate options for correctness

    WAKEUP_ENABLE_GPIO(4); WAKEUP_ENABLE_TIMER(2000); correctly enables GPIO pin 4 and timer with 2000 ms (2 seconds). WAKEUP_ENABLE_TIMER(2); WAKEUP_ENABLE_GPIO(4); uses 2 (seconds) instead of milliseconds. WAKEUP_ENABLE_GPIO(4, 2000); incorrectly combines parameters. WAKEUP_CONFIG(GPIO4 | TIMER_2S); uses an undefined macro.
  3. Final Answer:

    WAKEUP_ENABLE_GPIO(4); WAKEUP_ENABLE_TIMER(2000); -> Option C
  4. Quick Check:

    Separate calls with correct units = WAKEUP_ENABLE_GPIO(4); WAKEUP_ENABLE_TIMER(2000); [OK]
Hint: Enable GPIO and timer separately with correct units [OK]
Common Mistakes:
  • Using seconds instead of milliseconds for timer
  • Combining GPIO and timer in one call
  • Using undefined macros
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