tree: d3858b64388c3ef1f56b3641663ffaa47c2ae037 [path history] [tgz]
  1. include/
  2. src/
  3. test/
  4. pkg.yml
  5. README.md
versions/v1_4_0/mynewt-core/fs/fcb/README.md

Flash circular buffer

Overview

Storage of elements in flash in FIFO fashion. Elements are appended to the of the area until storage space is exhausted. Then the oldest sector should be erased and that can be used in storing new entries.

API

fcb_init()

  • initialize fcb for a given array of flash sectors

fcb_append()

  • reserve space to store an element fcb_append_finish()
  • storage of the element is finished; can calculate CRC for it

fcb_walk(cb, sector)

  • call cb for every element in the buffer. Or for every element in a particular flash sector, if sector is specified fcb_getnext(elem)
  • return element following elem

fcb_rotate()

  • erase oldest used sector, and make it current

Usage

To add an element to circular buffer:

  1. call fcb_append() to get location; if this fails due to lack of space, call fcb_rotate()
  2. use flash_area_write() to write contents
  3. call fcb_append_finish() when done

To read contents of the circular buffer:

  1. call fcb_walk() with callback
  2. within callback: copy in data from the element using flash_area_read(), call fcb_rotate() when all elements from a given sector have been read