LwRB documentation

Welcome to the documentation for version .

LwRB is a generic FIFO (First In; First Out) buffer library optimized for embedded systems.

_images/logo.svg

Features

  • Written in C (C11), compatible with size_t for size data types

  • Platform independent, no architecture specific code

  • FIFO (First In First Out) buffer implementation

  • No dynamic memory allocation, data is static array

  • Uses optimized memory copy instead of loops to read/write data from/to memory

  • Thread safe when used as pipe with single write and single read entries

  • Interrupt safe when used as pipe with single write and single read entries

  • Suitable for DMA transfers from and to memory with zero-copy overhead between buffer and application memory

  • Supports data peek, skip for read and advance for write

  • Implements support for event notifications

  • User friendly MIT license

Requirements

  • C compiler

  • Less than 1kB of non-volatile memory

Contribute

Fresh contributions are always welcome. Simple instructions to proceed:

  1. Fork Github repository

  2. Respect C style & coding rules used by the library

  3. Create a pull request to develop branch with new features or bug fixes

Alternatively you may:

  1. Report a bug

  2. Ask for a feature request

Example code

Minimalistic example code to read and write data to buffer

Example code
 1/* Declare rb instance & raw data */
 2lwrb_t buff;
 3uint8_t buff_data[8];
 4
 5/* Application variables */
 6uint8_t data[2];
 7size_t len;
 8
 9/* Application code ... */
10lwrb_init(&buff, buff_data, sizeof(buff_data)); /* Initialize buffer */
11
12/* Write 4 bytes of data */
13lwrb_write(&buff, "0123", 4);
14
15/* Try to read buffer */
16/* len holds number of bytes read */
17/* Read until len == 0, when buffer is empty */
18while ((len = lwrb_read(&buff, data, sizeof(data))) > 0) {
19    printf("Successfully read %d bytes\r\n", (int)len);
20}

License

Table of contents