Bird
Raised Fist0
Embedded Cprogramming~10 mins

Sleep modes overview 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 enter the CPU into idle sleep mode.

Embedded C
void enter_sleep_mode() {
    __asm__("[1]");
}
Drag options to blanks, or click blank then click option'
Asleep
Bhalt
Cnop
Dwfi
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'nop' which does nothing but does not sleep.
Using 'halt' which may stop the CPU but is not standard for idle sleep.
2fill in blank
medium

Complete the code to enable deep sleep mode by setting the SLEEPDEEP bit.

Embedded C
void enable_deep_sleep() {
    SCB->SCR |= [1];
}
Drag options to blanks, or click blank then click option'
ASCB_SCR_SLEEPDEEP_Msk
BSCB_SCR_SLEEPONEXIT_Msk
CSCB_SCR_SEVONPEND_Msk
DSCB_SCR_SLEEP_Msk
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong bit mask like SLEEPONEXIT which controls sleep on ISR exit.
Using a non-existent mask like SLEEP_Msk.
3fill in blank
hard

Fix the error in the code to correctly clear the SLEEPDEEP bit to exit deep sleep mode.

Embedded C
void disable_deep_sleep() {
    SCB->SCR &= ~[1];
}
Drag options to blanks, or click blank then click option'
ASCB_SCR_SLEEP_Msk
BSCB_SCR_SLEEPDEEP_Msk
CSCB_SCR_SEVONPEND_Msk
DSCB_SCR_SLEEPONEXIT_Msk
Attempts:
3 left
💡 Hint
Common Mistakes
Clearing the wrong bit like SLEEPONEXIT.
Using the bit mask without negation.
4fill in blank
hard

Fill both blanks to create a dictionary mapping sleep mode names to their descriptions.

Embedded C
const char* sleep_modes[] = {"Idle", "[1]", "[2]"};
Drag options to blanks, or click blank then click option'
AStandby
BHibernate
CSleep
DDeep
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'Sleep' which is generic and not a specific mode.
Using 'Deep' alone without proper context.
5fill in blank
hard

Fill all three blanks to complete the function that sets the sleep mode and enters sleep.

Embedded C
void set_sleep_mode_and_enter(int mode) {
    switch(mode) {
        case 0:
            SCB->SCR &= ~[1];
            break;
        case 1:
            SCB->SCR |= [2];
            break;
        default:
            return;
    }
    __asm__("[3]");
}
Drag options to blanks, or click blank then click option'
ASCB_SCR_SLEEPDEEP_Msk
BSCB_SCR_SLEEPONEXIT_Msk
Cwfi
Dnop
Attempts:
3 left
💡 Hint
Common Mistakes
Using different bit masks for clearing and setting.
Using 'nop' instead of 'wfi' to enter sleep.

Practice

(1/5)
1. What is the main purpose of using sleep modes in embedded C programming?
easy
A. To enable debugging features
B. To increase the clock speed of the microcontroller
C. To save power by stopping the CPU and peripherals
D. To reset the microcontroller automatically

Solution

  1. Step 1: Understand sleep mode function

    Sleep modes reduce power by stopping CPU and peripherals.
  2. Step 2: Compare options

    Only To save power by stopping the CPU and peripherals matches the purpose of saving power by stopping CPU and peripherals.
  3. Final Answer:

    To save power by stopping the CPU and peripherals -> Option C
  4. Quick Check:

    Sleep modes save power = D [OK]
Hint: Sleep modes mainly save power by pausing CPU/peripherals [OK]
Common Mistakes:
  • Thinking sleep mode speeds up the CPU
  • Confusing sleep mode with reset
  • Assuming sleep mode enables debugging
2. Which of the following is the correct way to enter sleep mode in embedded C?
easy
A. sleep_mode();
B. sleep();
C. enter_sleep();
D. go_to_sleep();

Solution

  1. Step 1: Recall standard sleep function

    The standard function to enter sleep mode is sleep_mode(); in many embedded C libraries.
  2. Step 2: Check other options

    Other options like sleep();, enter_sleep();, and go_to_sleep(); are not standard or common function names.
  3. Final Answer:

    sleep_mode(); -> Option A
  4. Quick Check:

    Standard sleep function = sleep_mode() [OK]
Hint: Standard sleep function is usually named sleep_mode() [OK]
Common Mistakes:
  • Using non-standard function names
  • Confusing sleep_mode() with sleep()
  • Assuming function names from other languages
3. Consider this code snippet in embedded C:
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sei(); // enable interrupts
sleep_cpu();
// CPU sleeps here
// Interrupt wakes CPU
sleep_disable();
What happens when an interrupt occurs during sleep?
medium
A. The CPU stays asleep until manually reset
B. The CPU resets immediately
C. The CPU ignores the interrupt
D. The CPU wakes up and continues execution after sleep_disable()

Solution

  1. Step 1: Understand sleep and interrupt behavior

    When CPU is in sleep mode, an interrupt wakes it up and execution continues after sleep_disable().
  2. Step 2: Analyze options

    Only The CPU wakes up and continues execution after sleep_disable() correctly describes waking up and continuing execution. Others describe incorrect behaviors.
  3. Final Answer:

    The CPU wakes up and continues execution after sleep_disable() -> Option D
  4. Quick Check:

    Interrupt wakes CPU = C [OK]
Hint: Interrupt wakes CPU and resumes after sleep_disable() [OK]
Common Mistakes:
  • Thinking CPU resets on interrupt
  • Assuming CPU stays asleep ignoring interrupts
  • Confusing sleep_disable() effect
4. This code tries to put the microcontroller into sleep mode but never wakes up:
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_enable();
cli(); // disable interrupts
sleep_cpu();
sleep_disable();
What is the main problem?
medium
A. Sleep mode IDLE does not stop the CPU
B. Interrupts are disabled, so CPU cannot wake up
C. sleep_disable() is called too early
D. set_sleep_mode() is missing

Solution

  1. Step 1: Check interrupt status before sleep

    Interrupts are disabled with cli();, so no interrupt can wake CPU.
  2. Step 2: Understand wake-up mechanism

    CPU wakes from sleep only via interrupts; disabling interrupts prevents wake-up.
  3. Final Answer:

    Interrupts are disabled, so CPU cannot wake up -> Option B
  4. Quick Check:

    Interrupts disabled = no wake-up [OK]
Hint: Interrupts must be enabled to wake CPU from sleep [OK]
Common Mistakes:
  • Thinking sleep mode IDLE stops CPU
  • Believing sleep_disable() controls wake-up
  • Ignoring interrupt enable/disable status
5. You want to save maximum power but keep the watchdog timer running to reset the microcontroller if needed. Which sleep mode should you choose?
hard
A. SLEEP_MODE_STANDBY
B. SLEEP_MODE_IDLE
C. SLEEP_MODE_PWR_DOWN
D. SLEEP_MODE_ADC

Solution

  1. Step 1: Understand power saving vs peripheral activity

    SLEEP_MODE_PWR_DOWN saves max power but stops watchdog timer. SLEEP_MODE_STANDBY saves power and keeps watchdog running.
  2. Step 2: Compare sleep modes

    SLEEP_MODE_IDLE and SLEEP_MODE_ADC keep more peripherals active, so use more power. SLEEP_MODE_STANDBY balances max power saving and watchdog activity.
  3. Final Answer:

    SLEEP_MODE_STANDBY -> Option A
  4. Quick Check:

    Max power save + watchdog running = STANDBY [OK]
Hint: STANDBY mode saves power and keeps watchdog active [OK]
Common Mistakes:
  • Choosing PWR_DOWN which stops watchdog
  • Confusing IDLE with max power saving
  • Assuming ADC mode saves most power
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