1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include "lwrb/lwrb.h"
/* Declare rb instance & raw data */
lwrb_t buff;
uint8_t buff_data[8];
size_t len;
uint8_t* data;
/* Initialize buffer, use buff_data as data array */
lwrb_init(&buff, buff_data, sizeof(buff_data));
/* Use write, read operations, process data */
/* ... */
/* IMAGE PART A */
/* At this stage, we have buffer as on image above */
/* R = 5, W = 4, buffer is considered full */
/* Get length of linear memory at read pointer */
/* Function returns 3 as we can read 3 bytes from buffer in sequence */
/* When function returns 0, there is no memory available in the buffer for read anymore */
if ((len = lwrb_get_linear_block_read_length(&buff)) > 0) {
/* Get pointer to first element in linear block at read address */
/* Function returns &buff_data[5] */
data = lwrb_get_linear_block_read_address(&buff);
/* Send data via DMA and wait to finish (for sake of example) */
send_data(data, len);
/* Now skip sent bytes from buffer = move read pointer */
lwrb_skip(&buff, len);
/* Now R points to top of buffer, R = 0 */
/* At this point, we are at image part B */
}
/* IMAGE PART B */
/* Get length of linear memory at read pointer */
/* Function returns 4 as we can read 4 bytes from buffer in sequence */
/* When function returns 0, there is no memory available in the buffer for read anymore */
if ((len = lwrb_get_linear_block_read_length(&buff)) > 0) {
/* Get pointer to first element in linear block at read address */
/* Function returns &buff_data[0] */
data = lwrb_get_linear_block_read_address(&buff);
/* Send data via DMA and wait to finish (for sake of example) */
send_data(data, len);
/* Now skip sent bytes from buffer = move read pointer */
/* Read pointer is moved for len bytes */
lwrb_skip(&buff, len);
/* Now R points to 4, that is R == W and buffer is now empty */
/* At this point, we are at image part C */
}
/* IMAGE PART C */
/* Buffer is considered empty as R == W */
|