// 링버퍼 초기화

ring_buffer_init();


// 링버퍼에 데이터 넣기 (현재 값은 8비트만 됩니다)

ring_buffer_put(값); 


// 링버퍼에서 데이터 얻기

값 = ring_bffer_pop();


----------------------------------------------------------------------------------------------

typedef unsigned char  u08;

typedef unsigned short u16;


#define RING_BUF_SIZE 2048


u08 ring_buf[RING_BUF_SIZE]; // ring buffer

u16 ring_buf_len = 0; // ring buffer length

u16 ring_buf_lp = 0; // load pointer

u16 ring_buf_cp = 0; // consume pointer


void ring_buffer_init(void)

{

    ring_buf_lp = 0;

    ring_buf_cp = 0;

    ring_buf_len = 0;

}


u16 ring_buffer_length(void)

{

    return ring_buf_len;

}


void ring_buffer_push(u08 data)

{

    ring_buf[ring_buf_lp++] = data;

    ring_buf_len++;


    if (ring_buf_len > RING_BUF_SIZE) {

        ring_buf_cp++;

        if (ring_buf_cp == RING_BUF_SIZE) {

            ring_buf_cp = 0;

        }

        ring_buf_len = RING_BUF_SIZE;

    }


    if (ring_buf_lp == RING_BUF_SIZE) {

        ring_buf_lp = 0;

    }

}


u08 ring_buffer_pop(void)

{

    u08 ret = 0;


    if (ring_buf_len > 0) {

        if (ring_buf_cp == RING_BUF_SIZE) {

            ring_buf_cp = 0;

        }

        ret = ring_buf[ring_buf_cp++];

        ring_buf_len--;

    }

    return ret;

}

 

+ Recent posts