Added macro to calculate the next power of two for FIFO data store (#69)
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
@@ -45,7 +45,7 @@
|
|||||||
*
|
*
|
||||||
* To use this library, first declare a data store, sized for a power of 2:
|
* To use this library, first declare a data store, sized for a power of 2:
|
||||||
* {@code
|
* {@code
|
||||||
* static volatile uint8_t data_store[64];
|
* static volatile FIFO_DATA_STORE(data_store, 64);
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* Then declare the FIFO tracking structure:
|
* Then declare the FIFO tracking structure:
|
||||||
@@ -343,8 +343,7 @@ void testFIFOBuffer(Test *pTest)
|
|||||||
{
|
{
|
||||||
/* FIFO data structure */
|
/* FIFO data structure */
|
||||||
FIFO_BUFFER test_buffer = { 0 };
|
FIFO_BUFFER test_buffer = { 0 };
|
||||||
/* FIFO data store. Note: size must be a power of two! */
|
volatile FIFO_DATA_STORE(data_store, 60) = { 0 };
|
||||||
volatile uint8_t data_store[64] = { 0 };
|
|
||||||
uint8_t add_data[40] = { "RoseSteveLouPatRachelJessicaDaniAmyHerb" };
|
uint8_t add_data[40] = { "RoseSteveLouPatRachelJessicaDaniAmyHerb" };
|
||||||
uint8_t test_add_data[40] = { 0 };
|
uint8_t test_add_data[40] = { 0 };
|
||||||
uint8_t test_data = 0;
|
uint8_t test_data = 0;
|
||||||
@@ -352,6 +351,7 @@ void testFIFOBuffer(Test *pTest)
|
|||||||
unsigned count = 0;
|
unsigned count = 0;
|
||||||
bool status = 0;
|
bool status = 0;
|
||||||
|
|
||||||
|
ct_test(pTest, sizeof(data_store) == 64);
|
||||||
FIFO_Init(&test_buffer, data_store, sizeof(data_store));
|
FIFO_Init(&test_buffer, data_store, sizeof(data_store));
|
||||||
ct_test(pTest, FIFO_Empty(&test_buffer));
|
ct_test(pTest, FIFO_Empty(&test_buffer));
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,29 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "bacnet/bacnet_stack_exports.h"
|
#include "bacnet/bacnet_stack_exports.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FIFO buffer power of two alignment macro
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#ifndef NEXT_POWER_OF_2
|
||||||
|
#define B2(x) ( (x) | ( (x) >> 1) )
|
||||||
|
#define B4(x) ( B2(x) | ( B2(x) >> 2) )
|
||||||
|
#define B8(x) ( B4(x) | ( B4(x) >> 4) )
|
||||||
|
#define B16(x) ( B8(x) | ( B8(x) >> 8) )
|
||||||
|
#define B32(x) (B16(x) | (B16(x) >>16) )
|
||||||
|
#define NEXT_POWER_OF_2(x) (B32((x)-1) + 1)
|
||||||
|
#endif
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FIFO data store structure
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FIFO_DATA_STORE(b,c) uint8_t b[NEXT_POWER_OF_2(c)]
|
||||||
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIFO data structure
|
* FIFO data structure
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user