📖 Scenario: You are working on a small embedded system that needs to save power when it is not actively doing work. To do this, the system can enter different sleep modes that reduce power consumption.Each sleep mode has a different level of power saving and wake-up time. You want to create a simple program that shows how to set and use these sleep modes.
🎯 Goal: Build a program that defines sleep modes, sets a current sleep mode, and prints the selected mode to the console.
📋 What You'll Learn
Define an enum for sleep modes with exact names and values
Create a variable to hold the current sleep mode
Write a function to set the sleep mode
Print the current sleep mode name
💡 Why This Matters
🌍 Real World
Embedded systems often need to save power by entering different sleep modes when idle. This project shows how to manage those modes in code.
💼 Career
Understanding sleep modes and how to control them is important for embedded software developers working on battery-powered or low-power devices.
Progress0 / 4 steps
1
Define sleep modes enum
Define an enum called SleepMode with these exact members and values: ACTIVE = 0, IDLE = 1, STANDBY = 2, OFF = 3.
Embedded C
Hint
Use typedef enum { ... } SleepMode; to define the sleep modes.
2
Create current sleep mode variable
Create a variable called currentMode of type SleepMode and set it to ACTIVE.
Embedded C
Hint
Declare currentMode as type SleepMode and assign ACTIVE.
3
Write function to set sleep mode
Write a function called setSleepMode that takes a parameter mode of type SleepMode and sets currentMode to mode.
Embedded C
Hint
Define setSleepMode to update currentMode.
4
Print current sleep mode
Write a main function that calls setSleepMode(STANDBY) and then prints the text "Current sleep mode: STANDBY" using printf.
Embedded C
Hint
Call setSleepMode(STANDBY) and print the message exactly.
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
Step 1: Understand sleep mode function
Sleep modes reduce power by stopping CPU and peripherals.
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.
Final Answer:
To save power by stopping the CPU and peripherals -> Option C
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
Step 1: Recall standard sleep function
The standard function to enter sleep mode is sleep_mode(); in many embedded C libraries.
Step 2: Check other options
Other options like sleep();, enter_sleep();, and go_to_sleep(); are not standard or common function names.
Final Answer:
sleep_mode(); -> Option A
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
Step 1: Understand sleep and interrupt behavior
When CPU is in sleep mode, an interrupt wakes it up and execution continues after sleep_disable().
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.
Final Answer:
The CPU wakes up and continues execution after sleep_disable() -> Option D
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:
Interrupts are disabled with cli();, so no interrupt can wake CPU.
Step 2: Understand wake-up mechanism
CPU wakes from sleep only via interrupts; disabling interrupts prevents wake-up.
Final Answer:
Interrupts are disabled, so CPU cannot wake up -> Option B
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
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.
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.
Final Answer:
SLEEP_MODE_STANDBY -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.