OSDN Git Service

111119 initial commit
[scilog/cpu2010.git] / ring.c
1 #include "ring.h"
2
3 /*
4         Ring Buffer用基本機能
5         write位置
6         read位置
7 */
8 static unsigned char    r_write;
9 static unsigned char   r_read;
10 static unsigned char    r_num;
11
12 /*
13 */
14 void ring_init(void)
15 {
16     r_write = 0;
17     r_read = 0;
18     r_num = RING_NUM;
19 }
20 /*
21     読み出し位置
22 */
23 unsigned char ring_read_get(void)
24 {
25     return r_read;
26 }
27 void ring_read_set(unsigned char i)
28 {
29         r_read = i;
30 }
31 void ring_read_plus(void)
32 {
33         r_read++;
34         if (r_read >= r_num) r_read = 0;
35 }
36 // 書き込み位置
37 unsigned char ring_write_get(void)
38 {
39     return r_write;
40 }
41 void ring_write_plus(void)
42 {
43     r_write++;
44     if (r_write >= r_num) r_write = 0;
45 }
46 // 読み込んでいないデータ数
47 unsigned char ring_num_get()
48 {
49     signed char i;
50
51     i = (signed char)r_write - (signed char)r_read;
52     if (i < 0) i += r_num;
53     return (unsigned char)i;
54 }
55
56 /*
57         パケットバッファフル?
58         1=Full
59         0=not Full
60 */
61 unsigned char ring_is_full(void)
62 {
63     if (ring_num_get() >= r_num - 1) return 1;
64     return 0;
65 }