Clock gating for power saving in Embedded C - Time & Space Complexity
We want to see how the time cost changes when using clock gating in embedded C code.
How does adding clock gating affect the number of operations as input grows?
Analyze the time complexity of the following code snippet.
void process_data(int *data, int size) {
enable_clock();
for (int i = 0; i < size; i++) {
data[i] = data[i] * 2;
}
disable_clock();
}
This code enables the clock, processes an array by doubling each element, then disables the clock.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that doubles each element in the array.
- How many times: Exactly once for each element, so 'size' times.
As the array size grows, the loop runs more times, increasing total operations.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 multiplications |
| 100 | About 100 multiplications |
| 1000 | About 1000 multiplications |
Pattern observation: The number of operations grows directly with input size.
Time Complexity: O(n)
This means the time to run the code grows in a straight line as the input size grows.
[X] Wrong: "Clock gating reduces the number of operations in the loop."
[OK] Correct: Clock gating only turns the clock on or off to save power; it does not skip or reduce the loop's work.
Understanding how clock gating affects code helps show you know both power saving and performance trade-offs in embedded systems.
"What if the clock was enabled and disabled inside the loop for each element? How would the time complexity change?"
Practice
Solution
Step 1: Understand clock gating concept
Clock gating disables the clock signal to parts of a chip that are not in use.Step 2: Identify the main benefit
Disabling clocks reduces power consumption and heat generation.Final Answer:
To save power by turning off clocks to unused modules -> Option DQuick Check:
Clock gating = power saving [OK]
- Thinking clock gating speeds up the processor
- Confusing clock gating with resetting hardware
- Assuming clock gating enables all modules
Solution
Step 1: Understand bit setting for enabling clock gating
Setting a bit (using |=) enables clock gating for that peripheral.Step 2: Analyze each option
CLK_GATE_REG |= (1 << PERIPHERAL_BIT); sets the bit; CLK_GATE_REG &= ~(1 << PERIPHERAL_BIT); clears it; CLK_GATE_REG = 0; clears all bits; CLK_GATE_REG ^= (1 << PERIPHERAL_BIT); toggles bits.Final Answer:
CLK_GATE_REG |= (1 << PERIPHERAL_BIT); -> Option AQuick Check:
Set bit to enable clock gating [OK]
- Using &=~ which clears bits instead of setting
- Assigning 0 clears all bits
- Using ^= toggles bits unpredictably
uint32_t CLK_GATE_REG = 0x0; #define PERIPH1_BIT 2 CLK_GATE_REG |= (1 << PERIPH1_BIT); CLK_GATE_REG &= ~(1 << PERIPH1_BIT);What is the final value of
CLK_GATE_REG?Solution
Step 1: Set bit 2 in CLK_GATE_REG
CLK_GATE_REG |= (1 << 2) sets bit 2, so value becomes 0x4.Step 2: Clear bit 2 in CLK_GATE_REG
CLK_GATE_REG &= ~(1 << 2) clears bit 2, so value returns to 0x0.Final Answer:
0x0 -> Option BQuick Check:
Set then clear bit 2 = 0x0 [OK]
- Forgetting that clearing bit resets value
- Confusing bit positions
- Assuming bits accumulate without clearing
uint32_t CLK_GATE_REG = 0xFF; #define PERIPH2_BIT 3 CLK_GATE_REG = (1 << PERIPH2_BIT);
Solution
Step 1: Analyze the assignment operation
Assigning CLK_GATE_REG = (1 << 3) overwrites previous bits, clearing all except bit 3.Step 2: Understand impact on clock gating
This disables clock gating for other peripherals unintentionally.Final Answer:
It clears all bits except bit 3, disabling other clocks -> Option CQuick Check:
Direct assignment clears other bits [OK]
- Using = instead of |= to set bits
- Ignoring impact on other bits
- Thinking this toggles bits
void update_clock_gating(bool peripheral_active) {
if (peripheral_active) {
CLK_GATE_REG &= ~(1 << PERIPH_BIT); // Disable gating
} else {
CLK_GATE_REG |= (1 << PERIPH_BIT); // Enable gating
}
}Solution
Step 1: Understand gating logic in code
When peripheral_active is true, gating is disabled (clock runs). When false, gating is enabled (clock off).Step 2: Confirm power saving behavior
Enabling gating only when peripheral is idle saves power correctly.Final Answer:
This code correctly enables gating when peripheral is idle -> Option AQuick Check:
Gating enabled when idle = power saving [OK]
- Reversing active and idle logic
- Forgetting to use |= and &=~ correctly
- Assuming code has syntax errors without checking
Ready to prove it?
Pass the test and this pattern moves unknown
