Interupsi rutin menyimpan data dalam buffer (buffer melingkar dengan put dan get pointer berfungsi dengan baik). Loop utama memeriksa untuk melihat apakah ada data di buffer dan ketika ada, mengeluarkannya. Loop utama dapat melakukan hal-hal lain tetapi perlu memeriksa dan menghapus data sebelum buffer overflow meluap (ketika put bertemu dengan get).
Itu tidak akan dikompilasi tetapi ini menggambarkan metode.
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;
}
}