Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf_ringbuf: "tmp_rd_idx" does not match "rd_idx" after "nrf_ringbuf_cpy_get()"

Hi,

calling "nrf_ringbuf_get()" immediately after "nrf_ringbuf_cpy_get()" returns an invalid pointer to the data.
A workaround could be to assign "rd_idx" to "tmp_rd_idx" before "nrf_ringbuf_get()".

NRF_RINGBUF_DEF (_ringbuf, 1024);
   ...
   uint8_t _data [64];
   size_t  _len_1 = 4;
   ...
   nrf_ringbuf_cpy_get (&_ringbuf, _data, &_len_1);

   _ringbuf.p_cb->tmp_rd_idx = _ringbuf.p_cb->rd_idx; // DO FIX "tmp_rd_idx" after "nrf_ringbuf_cpy_get()" before "nrf_ringbuf_get()"

   size_t  _len_2 = 4;
   nrf_ringbuf_get (&_ringbuf, &_data, &_len_2, false);
   ...
   nrf_ringbuf_free (&_ringbuf, _len_2);
   ...

Related