Polling and interrupt-driven execution are two ways a program can check for and respond to events. They help the program know when something important happens.
Polling vs interrupt-driven execution in Embedded C
/* Polling example */ while(1) { if (event_flag) { handle_event(); event_flag = 0; } } /* Interrupt-driven example */ void ISR() { handle_event(); } int main() { enable_interrupts(); while(1) { // main tasks } }
Polling uses a loop to check for events repeatedly.
Interrupt-driven uses special functions called ISRs that run automatically when events happen.
/* Polling: Check button press in a loop */ while(1) { if (button_pressed()) { turn_on_led(); } }
/* Interrupt-driven: Button press triggers ISR */ void button_ISR() { turn_on_led(); } int main() { enable_button_interrupt(); while(1) { // other tasks } }
This program simulates checking for an event in a loop. Every two loops, it sets an event flag. When the flag is set, it handles the event and clears the flag.
/* Simple polling example */ #include <stdio.h> #include <stdbool.h> bool event_flag = false; void handle_event() { printf("Event handled!\n"); } int main() { int counter = 0; while(counter < 5) { // Simulate event every 2 loops if (counter % 2 == 0) { event_flag = true; } if (event_flag) { handle_event(); event_flag = false; } counter++; } return 0; }
Polling can waste CPU time if events are rare because it keeps checking.
Interrupts let the CPU do other work or sleep until an event happens, saving power.
Interrupts need careful programming to avoid conflicts and bugs.
Polling checks for events repeatedly in a loop.
Interrupt-driven execution responds to events automatically using special functions.
Use polling for simple or fast-check needs; use interrupts for efficient and responsive programs.
Practice
Solution
Step 1: Understand polling concept
Polling means the program continuously checks if an event has happened by running a loop.Step 2: Compare options
Polling repeatedly checks for an event in a loop. correctly states polling as repeated checking. Options A, B, and C describe interrupts or incorrect facts.Final Answer:
Polling repeatedly checks for an event in a loop. -> Option AQuick Check:
Polling = repeated checking [OK]
- Confusing polling with interrupts
- Thinking polling is automatic
- Assuming polling disables interrupts
Solution
Step 1: Recall ISR declaration syntax
In many embedded C compilers, the keyword __interrupt before the function declares it as an ISR.Step 2: Check options
__interrupt void ISR() { /* code */ } uses __interrupt correctly. Options A, B, and D use incorrect or incomplete syntax.Final Answer:
__interrupt void ISR() { /* code */ } -> Option BQuick Check:
ISR declaration = __interrupt keyword [OK]
- Omitting __interrupt keyword
- Placing interrupt keyword after void
- Using plain void without interrupt
while(1) {
if (button_pressed()) {
toggle_led();
}
}
What happens when the button is pressed?Solution
Step 1: Analyze the polling loop
The loop continuously checks if button_pressed() returns true, then calls toggle_led() immediately.Step 2: Understand behavior on button press
When the button is pressed, button_pressed() becomes true, so toggle_led() runs right away.Final Answer:
The LED toggles immediately when the button is pressed. -> Option CQuick Check:
Polling triggers action immediately on event [OK]
- Thinking toggle waits for loop end
- Confusing polling with interrupts
- Assuming interrupts are required
void ISR() {
toggle_led();
}
int main() {
enable_interrupts();
while(1) {}
}
What is the main problem?Solution
Step 1: Check ISR declaration
The ISR function lacks the __interrupt keyword, so it won't be recognized as an interrupt handler.Step 2: Review other code parts
enable_interrupts() is correctly called once; toggle_led() can be called in ISR; infinite loop is normal in embedded main.Final Answer:
ISR is missing the __interrupt keyword. -> Option DQuick Check:
ISR needs __interrupt keyword [OK]
- Forgetting __interrupt keyword
- Thinking infinite loop is wrong
- Assuming toggle_led() is invalid in ISR
Solution
Step 1: Understand the requirement
The program should react only when the sensor changes and avoid wasting CPU time on constant checking.Step 2: Compare methods
Polling (options B, C, D) wastes CPU by checking repeatedly. Interrupt (Use an interrupt triggered by the sensor change.) triggers only on change, saving CPU.Final Answer:
Use an interrupt triggered by the sensor change. -> Option AQuick Check:
Interrupts save CPU by reacting only on events [OK]
- Choosing polling for efficiency
- Using delays wastes CPU
- Confusing timer polling with interrupts
Ready to prove it?
Pass the test and this pattern moves unknown
