OSDN Git Service

ring.c read pointer no.2 add
[scilog/cpu2010.git] / ring.c
1 #include "ring.h"
2
3 /*
4         Ring Buffer用基本機能
5         write位置
6         read位置
7 */
8 unsigned char   r_write;
9 unsigned char   r_read1;
10 unsigned char   r_read2;
11 unsigned char   r_num;
12
13 /*
14 */
15 void ring_init(void)
16 {
17     r_write = 0;
18     r_read1 = 0;
19     r_read2 = 0;
20     r_num = RING_NUM;
21 }
22 /*
23     読み出し位置
24 */
25 void ring_read1_set(unsigned char i)
26 {
27     r_read1 = i;
28 }
29 void ring_read1_plus(void)
30 {
31     r_read1++;
32     if (r_read1 >= r_num) r_read1 = 0;
33 }
34 void ring_read2_set(unsigned char i)
35 {
36     r_read2 = i;
37 }
38 void ring_read2_plus(void)
39 {
40     r_read2++;
41     if (r_read2 >= r_num) r_read2 = 0;
42 }
43
44 // 読み込んでいないデータ数
45 unsigned char ring_num1_get()
46 {
47     signed char i;
48
49     i = (signed char)r_write - (signed char)r_read1;
50     if (i < 0) i += r_num;
51     return (unsigned char)i;
52 }
53
54 unsigned char ring_num2_get()
55 {
56     signed char i;
57
58     i = (signed char)r_write - (signed char)r_read2;
59     if (i < 0) i += r_num;
60     return (unsigned char)i;
61 }
62 /*
63         パケットバッファフル?
64         1=Full
65         0=not Full
66 */
67 unsigned char ring_is_full1(void)
68 {
69     if (ring_num1_get() >= r_num - 1) return 1;
70     return 0;
71 }
72 unsigned char ring_is_full2(void)
73 {
74     if (ring_num2_get() >= r_num - 1) return 1;
75     return 0;
76 }