// 링버퍼 초기화
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;
}
'Language > C Programming' 카테고리의 다른 글
C programming :: 키 채터링 방지 키 체크 함수 (0) | 2011.12.19 |
---|---|
C programming :: 전처리기 매크로 치환 (0) | 2011.12.19 |
C programming :: Quick Sorting (0) | 2011.12.19 |
C programming :: 매크로를 이용한 메모리 직접 접근 방법 (0) | 2011.12.19 |
C Programming :: Void형 포인터와 NULL 포인터 (0) | 2011.12.19 |