Thường trình ngắt lưu trữ dữ liệu trong một bộ đệm (bộ đệm tròn với các con trỏ put và get hoạt động độc đáo). Vòng lặp chính kiểm tra xem có dữ liệu trong bộ đệm không và khi có, lấy nó ra. Vòng lặp chính có thể làm những việc khác nhưng cần kiểm tra và xóa dữ liệu trước khi tràn bộ đệm ngắt (khi lệnh put gặp với get).
Nó sẽ không biên dịch nhưng điều này minh họa cho phương pháp.
char circ_buf[BUFFER_SIZE];
int get_index, put_index;
void initialize(void) {
get_index = 0;
put_index = 0;
}
isr serial_port_interrupt(void) { // interrupt
circ_buf[put_index++] = SERIAL_PORT_REGISTER;
if(put_index==get_index) error("buffer overflow"); // oops
if(put_index==BUFFER_SIZE) put_index = 0; // circular buffer
}
void background routine(void) {
while(put_index!=get_index) { // or if()
ch = circ_buf[get_index++];
// do something with ch
if(get_index==BUFFER_SIZE) get_index = 0;
}
}