Bird
Raised Fist0
Embedded Cprogramming~5 mins

Configuring pin as input or output in Embedded C - Performance & Efficiency

Choose your learning style10 modes available
Time Complexity: Configuring pin as input or output
O(n)
Understanding Time Complexity

When configuring a pin as input or output, the code runs a few simple steps.

We want to see how the time it takes changes if we do this for many pins.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


void configure_pins(int pins[], int n) {
    for (int i = 0; i < n; i++) {
        if (pins[i] % 2 == 0) {
            // Set pin as output
            set_pin_output(pins[i]);
        } else {
            // Set pin as input
            set_pin_input(pins[i]);
        }
    }
}

This code sets each pin in the array as input or output based on whether the pin number is even or odd.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Looping through each pin in the array.
  • How many times: Exactly once for each pin, so n times.
How Execution Grows With Input

As the number of pins increases, the time to configure them grows in a straight line.

Input Size (n)Approx. Operations
1010 times setting pins
100100 times setting pins
10001000 times setting pins

Pattern observation: Doubling the pins doubles the work needed.

Final Time Complexity

Time Complexity: O(n)

This means the time to configure pins grows directly with the number of pins.

Common Mistake

[X] Wrong: "Configuring pins is always constant time no matter how many pins."

[OK] Correct: Each pin needs its own setup step, so more pins mean more time.

Interview Connect

Understanding how loops affect time helps you explain how embedded code scales with hardware changes.

Self-Check

"What if we configure pins in pairs instead of one by one? How would the time complexity change?"

Practice

(1/5)
1. Which register is used in embedded C to configure a microcontroller pin as input or output?
easy
A. PORT (Data Register)
B. TIMER Register
C. PIN (Input Register)
D. DDR (Data Direction Register)

Solution

  1. Step 1: Understand pin configuration registers

    The DDR register controls whether a pin is input or output by setting bits to 0 or 1.
  2. Step 2: Identify the correct register for direction

    PORT controls output values, PIN reads input values, TIMER is unrelated to pin direction.
  3. Final Answer:

    DDR (Data Direction Register) -> Option D
  4. Quick Check:

    DDR sets pin direction [OK]
Hint: Remember DDR sets direction: 1=output, 0=input [OK]
Common Mistakes:
  • Confusing PORT with DDR
  • Using PIN register to set direction
  • Thinking TIMER controls pin mode
2. Which of the following lines correctly sets pin 3 of PORTB as output in embedded C?
easy
A. DDRB |= (1 << 3);
B. DDRB &= ~(1 << 3);
C. PORTB |= (1 << 3);
D. PINB |= (1 << 3);

Solution

  1. Step 1: Understand setting pin as output

    To set a pin as output, set its bit in DDR register to 1 using bitwise OR.
  2. Step 2: Analyze each option

    DDRB |= (1 << 3); uses DDRB |= (1 << 3) which sets bit 3 to 1 correctly. DDRB &= ~(1 << 3); clears bit 3 (input). Options C and D affect PORTB and PINB, not direction.
  3. Final Answer:

    DDRB |= (1 << 3); -> Option A
  4. Quick Check:

    Use |= with DDR to set output [OK]
Hint: Use |= with DDR to set output bit [OK]
Common Mistakes:
  • Using &= ~ instead of |= to set output
  • Modifying PORT or PIN instead of DDR
  • Shifting wrong bit position
3. What is the effect of the following code snippet?
DDRC |= (1 << 2);  // Line 1
DDRC &= ~(1 << 2); // Line 2
medium
A. Pin 2 of PORTC is set as output then input
B. Pin 2 of PORTC remains output
C. Pin 2 of PORTC remains input
D. Syntax error in code

Solution

  1. Step 1: Analyze Line 1

    DDRC |= (1 << 2) sets bit 2 to 1, configuring pin 2 as output.
  2. Step 2: Analyze Line 2

    DDRC &= ~(1 << 2) clears bit 2 to 0, configuring pin 2 as input.
  3. Final Answer:

    Pin 2 of PORTC is set as output then input -> Option A
  4. Quick Check:

    Set then clear bit changes pin direction [OK]
Hint: |= sets output, &=~ clears to input [OK]
Common Mistakes:
  • Thinking both lines set output
  • Ignoring second line effect
  • Confusing PORTC with DDRC
4. Identify the error in this code that tries to set pin 5 of PORTD as input:
DDRD |= (0 << 5);
medium
A. DDRD cannot be modified directly
B. Bit shift is incorrect, should be (1 << 5)
C. Should use &= ~ instead of |= to set input
D. No error, code is correct

Solution

  1. Step 1: Understand setting pin as input

    To set a pin as input, clear its bit in DDR register using &= ~ (bitwise AND with NOT).
  2. Step 2: Analyze the code

    DDRD |= (0 << 5) does nothing because (0 << 5) is 0; it does not clear bit 5. Correct way is DDRD &= ~(1 << 5).
  3. Final Answer:

    Should use &= ~ instead of |= to set input -> Option C
  4. Quick Check:

    Use &= ~ to clear bit for input [OK]
Hint: Use &= ~ to clear bit for input, not |= [OK]
Common Mistakes:
  • Using |= with 0 does not clear bit
  • Confusing bitwise OR and AND
  • Not using bitwise NOT (~) when clearing
5. You want to configure pins 0, 1, and 2 of PORTA as outputs and pins 3 and 4 as inputs without changing other pins. Which code snippet correctly does this?
hard
A. DDRA |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4);
B. DDRA |= (1 << 0) | (1 << 1) | (1 << 2); DDRA &= ~((1 << 3) | (1 << 4));
C. DDRA |= (1 << 0) & (1 << 1) & (1 << 2); DDRA &= ~((1 << 3) & (1 << 4));
D. DDRA = (1 << 0) | (1 << 1) | (1 << 2); DDRA = ~((1 << 3) | (1 << 4));

Solution

  1. Step 1: Set pins 0,1,2 as outputs

    Use bitwise OR to set bits 0,1,2 without affecting others: DDRA |= (1<<0)|(1<<1)|(1<<2);
  2. Step 2: Set pins 3,4 as inputs

    Clear bits 3 and 4 using bitwise AND with NOT: DDRA &= ~((1<<3)|(1<<4));
  3. Final Answer:

    DDRA |= (1 << 0) | (1 << 1) | (1 << 2); DDRA &= ~((1 << 3) | (1 << 4)); -> Option B
  4. Quick Check:

    Use |= to set output bits, &=~ to clear input bits [OK]
Hint: Set outputs with |=, inputs with &= ~ combined masks [OK]
Common Mistakes:
  • Overwriting DDRA instead of modifying bits
  • Using & instead of | for combining bits
  • Setting input pins as output by mistake
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