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

How to count no of elements in an Atomic_FIFO ?

Hi, I'm using Atomic_FIFO library and for my application I need to know the number of elements currently in the fifo, the library itself doesn't provide any functionality that tells the fifo size so I made some changes to it. I added following two lines in the header file.

static nrf_atomic_u32_t fifo_size;
uint32_t get_fifo_size();

And added some lines in the c file, shown below.

bool nrf_atfifo_item_put(nrf_atfifo_t * const p_fifo, nrf_atfifo_item_put_t * p_context)
{
    if ((p_context->last_tail.pos.wr) == (p_context->last_tail.pos.rd))
    {
        nrf_atfifo_wspace_close(p_fifo);
	    nrf_atomic_u32_add(&fifo_size, 1);  //my addition
        return true;
    }
    return false;
}

bool nrf_atfifo_item_free(nrf_atfifo_t * const p_fifo, nrf_atfifo_item_get_t * p_context)
{
    if ((p_context->last_head.pos.wr) == (p_context->last_head.pos.rd))
    {
        nrf_atfifo_rspace_close(p_fifo);
        nrf_atomic_u32_sub(&fifo_size, 1);  // my addition
        return true;
    }
    return false;
}


// my addition
uint32_t get_fifo_size()
{	return fifo_size;
}

So i declared a variable and increment and decrement it on successful push/pop operations. It works fine(well, at least it seems to work fine). But now I need another fifo, and as you might have noticed, my implementation of getSize(), will count all the push/pop operations across all the fifos created. So my question is how to add getSize() function that gives the current size of the respective fifos ?

Also, how to peek at an element at the front of fifo without actually removing it ?

Parents Reply Children
No Data
Related