Bird
Raised Fist0
Embedded Cprogramming~10 mins

Wake-up sources configuration in Embedded C - Interactive Code Practice

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

Complete the code to enable the wake-up source for the timer.

Embedded C
WAKEUP_EnableSource([1]);
Drag options to blanks, or click blank then click option'
AWAKEUP_SOURCE_GPIO
BWAKEUP_SOURCE_UART
CWAKEUP_SOURCE_TIMER
DWAKEUP_SOURCE_ADC
Attempts:
3 left
💡 Hint
Common Mistakes
Choosing a wake-up source unrelated to the timer.
Using a peripheral name instead of a wake-up source constant.
2fill in blank
medium

Complete the code to configure the GPIO pin as a wake-up source.

Embedded C
WAKEUP_ConfigGPIO([1], GPIO_PIN_5);
Drag options to blanks, or click blank then click option'
AGPIO_PORT_B
BGPIO_PORT_C
CGPIO_PORT_A
DGPIO_PORT_D
Attempts:
3 left
💡 Hint
Common Mistakes
Selecting the wrong GPIO port.
Confusing pin numbers with port names.
3fill in blank
hard

Fix the error in the code to correctly disable the UART wake-up source.

Embedded C
WAKEUP_DisableSource([1]);
Drag options to blanks, or click blank then click option'
AWAKEUP_SOURCE_TIMER
BWAKEUP_SOURCE_GPIO
CWAKEUP_SOURCE_ADC
DWAKEUP_SOURCE_UART
Attempts:
3 left
💡 Hint
Common Mistakes
Passing the wrong wake-up source constant.
Confusing enable and disable functions.
4fill in blank
hard

Fill both blanks to configure and enable the ADC as a wake-up source.

Embedded C
WAKEUP_ConfigADC([1]);
WAKEUP_EnableSource([2]);
Drag options to blanks, or click blank then click option'
AADC_CHANNEL_3
BADC_CHANNEL_5
CWAKEUP_SOURCE_ADC
DWAKEUP_SOURCE_TIMER
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing ADC channels with wake-up source constants.
Enabling the wrong wake-up source.
5fill in blank
hard

Fill all three blanks to create a wake-up source dictionary with GPIO and Timer sources.

Embedded C
const WakeupSourceConfig wakeup_sources = {
    [1]: GPIO_PIN_7,
    [2]: TIMER_2,
    [3]: UART_1
};
Drag options to blanks, or click blank then click option'
AWAKEUP_SOURCE_GPIO
BWAKEUP_SOURCE_TIMER
CWAKEUP_SOURCE_UART
DWAKEUP_SOURCE_ADC
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect constants for the dictionary keys.
Mixing up peripheral names and wake-up source constants.

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