12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #include "ringbuf.h"
- I16 ICACHE_FLASH_ATTR RINGBUF_Init(RINGBUF *r, U8* buf, I32 size)
- {
- if (r == NULL || buf == NULL || size < 2) return -1;
- r->p_o = r->p_r = r->p_w = buf;
- r->fill_cnt = 0;
- r->size = size;
- return 0;
- }
- I16 ICACHE_FLASH_ATTR RINGBUF_Put(RINGBUF *r, U8 c)
- {
- if (r->fill_cnt >= r->size)return -1;
- r->fill_cnt++;
- *r->p_w++ = c;
- if (r->p_w >= r->p_o + r->size)
- r->p_w = r->p_o;
- return 0;
- }
- I16 ICACHE_FLASH_ATTR RINGBUF_Get(RINGBUF *r, U8* c)
- {
- if (r->fill_cnt <= 0)return -1;
- r->fill_cnt--;
- *c = *r->p_r++;
- if (r->p_r >= r->p_o + r->size)
- r->p_r = r->p_o;
- return 0;
- }
|