File tree 3 files changed +18
-6
lines changed 3 files changed +18
-6
lines changed Original file line number Diff line number Diff line change @@ -527,7 +527,8 @@ STATIC mp_obj_t extra_coverage(void) {
527
527
// ringbuf
528
528
{
529
529
byte buf [100 ];
530
- ringbuf_t ringbuf = {buf , sizeof (buf ), 0 , 0 };
530
+ ringbuf_t ringbuf ;
531
+ ringbuf_init (& ringbuf , & buf [0 ], sizeof (buf ));
531
532
532
533
mp_printf (& mp_plat_print , "# ringbuf\n" );
533
534
Original file line number Diff line number Diff line change 27
27
28
28
#include "ringbuf.h"
29
29
30
+ bool ringbuf_init (ringbuf_t * r , uint8_t * buf , size_t capacity ) {
31
+ r -> heap = false;
32
+ r -> buf = buf ;
33
+ r -> size = capacity ;
34
+ r -> iget = r -> iput = 0 ;
35
+ return r -> buf != NULL ;
36
+ }
37
+
30
38
// Dynamic initialization. This should be accessible from a root pointer.
31
39
// capacity is the number of bytes the ring buffer can hold. The actual
32
40
// size of the buffer is one greater than that, due to how the buffer
33
41
// handles empty and full statuses.
34
42
bool ringbuf_alloc (ringbuf_t * r , size_t capacity , bool long_lived ) {
43
+ r -> heap = true;
35
44
r -> buf = gc_alloc (capacity + 1 , false, long_lived );
36
45
r -> size = capacity + 1 ;
37
46
r -> iget = r -> iput = 0 ;
38
47
return r -> buf != NULL ;
39
48
}
40
49
41
50
void ringbuf_free (ringbuf_t * r ) {
42
- gc_free (r -> buf );
51
+ if (r -> heap ) {
52
+ gc_free (r -> buf );
53
+ }
54
+ r -> buf = (uint8_t * )NULL ;
43
55
r -> size = 0 ;
44
56
ringbuf_clear (r );
45
57
}
Original file line number Diff line number Diff line change @@ -37,14 +37,13 @@ typedef struct _ringbuf_t {
37
37
uint32_t size ;
38
38
uint32_t iget ;
39
39
uint32_t iput ;
40
+ bool heap ;
40
41
} ringbuf_t ;
41
42
42
43
// Note that the capacity of the buffer is N-1!
43
44
44
- // Static initialization:
45
- // byte buf_array[N];
46
- // ringbuf_t buf = {buf_array, sizeof(buf_array)};
47
-
45
+ // For static initialization use ringbuf_init()
46
+ bool ringbuf_init (ringbuf_t * r , uint8_t * buf , size_t capacity );
48
47
bool ringbuf_alloc (ringbuf_t * r , size_t capacity , bool long_lived );
49
48
void ringbuf_free (ringbuf_t * r );
50
49
size_t ringbuf_capacity (ringbuf_t * r );
You can’t perform that action at this time.
0 commit comments