Bird
Raised Fist0
Embedded Cprogramming~10 mins

Start and stop conditions in Embedded C - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Start and stop conditions
Initialize variables
↓
Check start condition
Yes↓
Start main operation
↓
Check stop condition
No↓
Continue operation
↓
Check stop condition
Yes↓
Stop operation and exit
The program waits for a start condition to begin operation, then repeatedly checks a stop condition to know when to end.
Execution Sample
Embedded C
int start = 0;
int stop = 0;

// Wait for start
while(!start) {
  start = check_start_signal();
}

// Run until stop
while(!stop) {
  perform_task();
  stop = check_stop_signal();
}
This code waits until a start signal is true, then runs a task repeatedly until a stop signal is true.
Execution Table
StepstartstopCondition CheckedAction TakenOutput
100start == 0Check start signalstart remains 0, loop continues
200start == 0Check start signalstart becomes 1, loop exits
310stop == 0perform_task() calledstop remains 0
410stop == 0perform_task() calledstop remains 0
510stop == 0perform_task() calledstop becomes 1, loop exits
611Loop endsStop operationProgram ends
exit11stop == 1Stop condition metExit main loop
💡 stop becomes 1, so stop == 0 condition is false and loop ends
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5Final
start0011111
stop0000011
Key Moments - 2 Insights
Why does the program wait in the first loop before starting the main operation?
Because the start variable is 0 initially, the condition 'while(!start)' keeps the program waiting until start becomes 1, as shown in execution_table rows 1 and 2.
Why does the main loop stop running when stop becomes 1?
The main loop condition is 'while(!stop)', so when stop is 1, '!stop' is false, causing the loop to exit as shown in execution_table row 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'start' after step 2?
A1
B0
CUndefined
D2
💡 Hint
Check the 'start' column in execution_table row 2.
At which step does the stop condition become true, causing the main loop to exit?
AStep 3
BStep 1
CStep 5
DStep 6
💡 Hint
Look at the 'stop' column and 'Condition Checked' in execution_table rows.
If the start signal never becomes true, what happens to the program?
AIt runs the main loop anyway
BIt waits forever in the first loop
CIt exits immediately
DIt crashes
💡 Hint
Refer to execution_table rows 1 and 2 where start is checked.
Concept Snapshot
Start and stop conditions control program flow.
Use a loop to wait for start condition (e.g., while(!start)).
After start, run main loop until stop condition is true (e.g., while(!stop)).
Check conditions each iteration to decide when to start or stop.
This pattern ensures controlled operation start and safe stop.
Full Transcript
This example shows how a program waits for a start signal before running its main task. Initially, the variable 'start' is zero, so the program stays in the first loop checking for the start signal. Once 'start' becomes one, the program exits the waiting loop and enters the main loop. In the main loop, it repeatedly checks the 'stop' variable. As long as 'stop' is zero, the program performs its task. When 'stop' becomes one, the main loop ends and the program stops. This pattern helps control when a program begins and ends its operation safely.

Practice

(1/5)
1.

What does a start condition indicate in embedded C communication protocols?

easy
A. It signals the beginning of data transmission.
B. It signals the end of data transmission.
C. It resets the device.
D. It pauses the communication temporarily.

Solution

  1. Step 1: Understand start condition role

    The start condition marks when a device begins sending data on the communication line.
  2. Step 2: Differentiate from stop condition

    Unlike the stop condition which ends communication, the start condition initiates it.
  3. Final Answer:

    It signals the beginning of data transmission. -> Option A
  4. Quick Check:

    Start condition = beginning signal [OK]
Hint: Start means begin communication, stop means end it [OK]
Common Mistakes:
  • Confusing start with stop condition
  • Thinking start resets the device
  • Assuming start pauses communication
2.

Which of the following is the correct syntax to generate a stop condition in embedded C I2C communication?

void i2c_stop() {
    // Which line correctly generates stop condition?
    ?
}
easy
A. SDA = 1; SCL = 1;
B. SDA = 1; SCL = 0;
C. SDA = 0; SCL = 0;
D. SDA = 0; SCL = 1;

Solution

  1. Step 1: Recall stop condition signal

    Stop condition occurs when SDA line goes from low to high while SCL is high.
  2. Step 2: Match with code lines

    Setting SDA=1 and SCL=1 matches the stop condition signal.
  3. Final Answer:

    SDA = 1; SCL = 1; -> Option A
  4. Quick Check:

    Stop condition = SDA rising while SCL high [OK]
Hint: Stop condition: SDA rises while SCL is high [OK]
Common Mistakes:
  • Setting SDA low instead of high for stop
  • Setting SCL low during stop condition
  • Confusing start and stop line states
3.

What will be the output of this code snippet simulating I2C start and stop conditions?

#include <stdio.h>
int start = 0, stop = 0;

void i2c_start() {
    start = 1;
    stop = 0;
}

void i2c_stop() {
    stop = 1;
    start = 0;
}

int main() {
    i2c_start();
    i2c_stop();
    if (start == 0 && stop == 1) {
        printf("Communication ended\n");
    } else {
        printf("Communication ongoing\n");
    }
    return 0;
}
medium
A. No output
B. Communication ongoing
C. Communication ended
D. Compilation error

Solution

  1. Step 1: Trace function calls and variable changes

    Calling i2c_start() sets start=1, stop=0; then i2c_stop() sets stop=1, start=0.
  2. Step 2: Evaluate if condition in main

    The condition start==0 and stop==1 is true, so it prints "Communication ended".
  3. Final Answer:

    Communication ended -> Option C
  4. Quick Check:

    start=0 & stop=1 means communication ended [OK]
Hint: Last called condition sets flags; check their final values [OK]
Common Mistakes:
  • Assuming start remains 1 after stop call
  • Confusing variable assignments order
  • Expecting output before function calls
4.

Identify the error in this code snippet that tries to generate a start condition:

void i2c_start() {
    SDA = 1;
    SCL = 1;
    SDA = 0;
}
medium
A. SCL should be set to 0 after SDA goes low.
B. SCL should be low before SDA goes low to start communication.
C. SDA should go from low to high, not high to low.
D. SDA should go from high to low while SCL is high, so code is correct.

Solution

  1. Step 1: Recall start condition definition

    Start condition requires SDA to go from high to low while SCL is high.
  2. Step 2: Analyze code sequence

    The code first sets SDA=1, SCL=1 (establishing high-high state), then SDA=0 while SCL remains high, correctly generating the start condition.
  3. Final Answer:

    SDA should go from high to low while SCL is high, so code is correct. -> Option D
  4. Quick Check:

    Start condition = SDA high->low while SCL high [OK]
Hint: Start condition: SDA falls while SCL high [OK]
Common Mistakes:
  • Confusing start (high->low) with stop (low->high)
  • Thinking SCL must be low before SDA transition
  • Ignoring that the code correctly times the transition
5.

You want to design a function that sends multiple data bytes over I2C with proper start and stop conditions. Which sequence correctly ensures communication integrity?

void send_data() {
    // Which sequence is correct?
    ?
}
hard
A. i2c_start(); send_byte(0x50); i2c_stop(); send_byte(0xA0);
B. i2c_start(); send_byte(0x50); send_byte(0xA0); i2c_stop();
C. send_byte(0x50); i2c_start(); send_byte(0xA0); i2c_stop();
D. i2c_stop(); send_byte(0x50); send_byte(0xA0); i2c_start();

Solution

  1. Step 1: Understand I2C communication flow

    Communication must start with a start condition, then data bytes are sent, and finally a stop condition ends it.
  2. Step 2: Evaluate each option sequence

    i2c_start(); send_byte(0x50); send_byte(0xA0); i2c_stop(); correctly starts communication, sends bytes, then stops. Others start or stop in wrong order.
  3. Final Answer:

    i2c_start(); send_byte(0x50); send_byte(0xA0); i2c_stop(); -> Option B
  4. Quick Check:

    Start -> data -> stop sequence is correct [OK]
Hint: Always start before sending data and stop after all bytes [OK]
Common Mistakes:
  • Sending data before start condition
  • Calling stop before all data sent
  • Mixing order of start and stop calls
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