Kesme rutini verileri bir tamponda saklar (koy ve al işaretçileri olan dairesel bir tampon güzel çalışır). Ana döngü, arabellekte veri olup olmadığını kontrol eder ve varsa onu çıkarır. Ana döngü başka şeyler yapabilir, ancak kesme arabelleği taşmadan önce verileri kontrol etmeli ve kaldırmalıdır (put, get ile buluştuğunda).
Derlenmeyecektir, ancak bu yöntemi göstermektedir.
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;
}
}