From cb8ce335843517f833efbb8e95f010344d568b24 Mon Sep 17 00:00:00 2001 From: adragott Date: Thu, 31 Oct 2019 04:19:19 -0500 Subject: [PATCH] init --- CircularBuffer/.vscode/launch.json | 29 ++ CircularBuffer/CB-README.md | 0 CircularBuffer/Makefile | 43 ++ CircularBuffer/bin/PCircularBuffer.o | Bin 0 -> 4830 bytes CircularBuffer/bin/test.o | Bin 0 -> 1375 bytes CircularBuffer/bin/tester.exe | Bin 0 -> 349555 bytes .../example/simple_circular_buffer_example.c | 41 ++ CircularBuffer/inc/PCircularBuffer.h | 202 +++++++++ CircularBuffer/src/PCircularBuffer.c | 427 ++++++++++++++++++ CircularBuffer/test/test.c | 21 + README.md | 1 + 11 files changed, 764 insertions(+) create mode 100644 CircularBuffer/.vscode/launch.json create mode 100644 CircularBuffer/CB-README.md create mode 100644 CircularBuffer/Makefile create mode 100644 CircularBuffer/bin/PCircularBuffer.o create mode 100644 CircularBuffer/bin/test.o create mode 100644 CircularBuffer/bin/tester.exe create mode 100644 CircularBuffer/example/simple_circular_buffer_example.c create mode 100644 CircularBuffer/inc/PCircularBuffer.h create mode 100644 CircularBuffer/src/PCircularBuffer.c create mode 100644 CircularBuffer/test/test.c create mode 100644 README.md diff --git a/CircularBuffer/.vscode/launch.json b/CircularBuffer/.vscode/launch.json new file mode 100644 index 0000000..4bb622a --- /dev/null +++ b/CircularBuffer/.vscode/launch.json @@ -0,0 +1,29 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "gcc.exe build and debug active file", + "type": "cppdbg", + "request": "launch", + "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "gcc.exe build active file" + } + ] +} \ No newline at end of file diff --git a/CircularBuffer/CB-README.md b/CircularBuffer/CB-README.md new file mode 100644 index 0000000..e69de29 diff --git a/CircularBuffer/Makefile b/CircularBuffer/Makefile new file mode 100644 index 0000000..51f0d99 --- /dev/null +++ b/CircularBuffer/Makefile @@ -0,0 +1,43 @@ +CC=gcc +CFLAGS=-std=c99 -Wall -Wextra + +#-Werror -Wshadow -Wdouble-promotion \ + -Wformat=2 -Wformat-truncation -fno-common -fstack-usage -Wconversion -Os \ + -Werror=unused-function + +BIN=./bin +SRC=./src +INC=./inc +TEST=./test +EXAMPLE_DIR=./example +TESTER_OBJS=$(BIN)/PCircularBuffer.o $(BIN)/test.o +EXAMPLE_OBJS=$(BIN)/PCircularBuffer.o $(BIN)/simple_circular_buffer_example.o + +TESTER=$(BIN)/tester +EXAMPLE=$(BIN)/simple_circular_buffer_example + +$(TESTER): $(TESTER_OBJS) + $(CC) $(CFLAGS) -o $@ $(TESTER_OBJS) + +$(EXAMPLE): $(EXAMPLE_OBJS) + $(CC) $(CFLAGS) -o $@ $(EXAMPLE_OBJS) + +$(BIN)/PCircularBuffer.o: $(SRC)/PCircularBuffer.c $(INC)/PCircularBuffer.h + $(CC) -c $(CFLAGS) -I$(INC) $(SRC)/PCircularBuffer.c -o $(BIN)/PCircularBuffer.o + +$(BIN)/test.o: $(TEST)/test.c + $(CC) -c $(CFLAGS) -I$(INC) $(TEST)/test.c -o $(BIN)/test.o + +$(BIN)/simple_circular_buffer_example.o: $(EXAMPLE_DIR)/simple_circular_buffer_example.c + $(CC) -c $(CFLAGS) -I$(INC) $(EXAMPLE_DIR)/simple_circular_buffer_example.c -o $(BIN)/simple_circular_buffer_example.o + +all: $(TESTER) $(EXAMPLE) + +clean: + rm -rf $(BIN)/* + +test: $(TESTER) + $(TESTER) + +example: $(EXAMPLE) + $(EXAMPLE) \ No newline at end of file diff --git a/CircularBuffer/bin/PCircularBuffer.o b/CircularBuffer/bin/PCircularBuffer.o new file mode 100644 index 0000000000000000000000000000000000000000..182cbea589ec05c0a6873620529202d2631c8e03 GIT binary patch literal 4830 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

v(tT07uSxfP>Dq1(;j5+VlN5YA4 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 N_I}jGdw=)ue*q;|8Xy1w literal 0 HcmV?d00001 diff --git a/CircularBuffer/example/simple_circular_buffer_example.c b/CircularBuffer/example/simple_circular_buffer_example.c new file mode 100644 index 0000000..6f431b8 --- /dev/null +++ b/CircularBuffer/example/simple_circular_buffer_example.c @@ -0,0 +1,41 @@ +/* + (WORK IN PROGRESS) + Penguin's Circular Buffer Example -- Turning a noisy bell curve into a less noisy bell curve + + Here's an example of using the circular buffer library for sensor data: + + Let's say I have a sensor that gives me temperature at 1khz (using ideals so it is exactly 1khz) + If this sensor was only giving me raw analog data, I might want to do some processing on these values + so that I can make sure the values are as clean as possible. The more samples we have, the closer we are to the actual value. + The faster we gather samples, the closer we get to representing our data in realtime. + + Using the sample rate, I can decide on a sampling window (in seconds) and an OSR (Oversampling Rate). The larger the buffer size, the more memory I need, so + it is useful to find a happy medium between a large buffer and clean values. + + A sampling window is the window of time in which we can accept values for an average value. Depending on your application, + a sampling window may need to be extremely small or maybe not so small. A rocket going extremely fast using + some sensor for real time controls will want an extremely small sampling window as well as a lot of measurements for + both clean, near noiseless data and as close to realtime data as possible. + + The sampling windows is usually an engineering requirement given that can match the sampling rate of the sensor with the following: + sampling window (in seconds) = 1 / frequency + Here, the OSR is simply 1. + + So at 1khz sample rate, let's say I decide I only need a 0.125 second sample window and I want to clean up some noisy data. + We can now use this equation: + OSR = frequency * sample window (in seconds) + + All of these have ignored real world slowdowns like the time it takes to do math on lower end hardware, interrupts slightly delaying the math, etc + Without wanting to do some hard analysis on whatever hardware we're using, I usually take my frequency and half it to ensure timing requirements are met, like so: + + OSR = frequency / 2 * sample window + + Please note: In applications that require real real-time data, this is not a good way of doing things. + +*/ + +int main() +{ + + return 0; +} \ No newline at end of file diff --git a/CircularBuffer/inc/PCircularBuffer.h b/CircularBuffer/inc/PCircularBuffer.h new file mode 100644 index 0000000..8eab357 --- /dev/null +++ b/CircularBuffer/inc/PCircularBuffer.h @@ -0,0 +1,202 @@ +// Resource/Inspiration: https://embedjournal.com/implementing-circular-buffer-embedded-c/ + +/* + Penguin's Circular Buffer -- a simple floating queue designed for low memory usage (mainly for embedded) + + This is a ring buffer with limited capabilities. It is meant as a container for moving data. + Normally included features such checks to see if the buffer is full or empty have been omitted + because this type of buffer is being implemented mainly for sensor data usage. Data is almost never read individually, + and even if it is, it isn't meant to be cleared on read. It is a simple moving buffer that automatically + writes over old data for the purpose of keeping track of the most up to date data. + + Notes: + - Initialization is mandatory using p_cb__init. + - If a circular buffer is not initialized, you will run into a LOT of hard-to-debug problems. Just initialize it. + - By default, all cb types should be defined as disabled. This is to save on size. Enable the ones you want to use. + + Behavior: + - Oldest data is overwritten + - popping of data isn't implemented. If this feature is required, use a ring buffer. + + Acronyms: + - p: penguin + - pb: penguin buffer + - cb: circular buffer + - uX, where X is bit size: unsigned X bit integer + - iX, where X is bit size: signed X bit integer +*/ + +#ifndef _PCIRCULARBUFFER_H_ +#define _PCIRCULARBUFFER_H_ + +#include +#include +// comment this out for release builds +#define PB_CB_DEBUG + +// Making these PB_EN/DIS rather than just ENABLE/DISABLE because +// some enable/disable definition might already exist that is +// inversely active (enabled = 0, disable = 1) +// this way our en/dis definitions are explicit +#ifndef PB_ENABLE + #define PB_ENABLE (1) +#endif + +#ifndef PB_DISABLE + #define PB_DISABLE (0) +#endif + +// Max size is 65535 (2^16 - 1) so variables can be safely set 16 bits (unsigned) +// If you want to change this, you'll need to change the sizes of all heads and max lengths +#define PB_CB_MAX_BUFFER_SIZE (65535) + +// Config +// Disable or Enable types needed here +// We can save code size this way +// While there are better ways to do this, this is the most accessible for anyone imo +#define PB_CB_FLOAT PB_ENABLE +#define PB_CB_DOUBLE PB_ENABLE +#define PB_CB_U8 PB_ENABLE +#define PB_CB_U16 PB_ENABLE +#define PB_CB_U32 PB_ENABLE +#define PB_CB_U64 PB_ENABLE +#define PB_CB_I8 PB_DISABLE +#define PB_CB_I16 PB_DISABLE +#define PB_CB_I32 PB_DISABLE +#define PB_CB_I64 PB_DISABLE + +typedef enum PB_CB_STATUS +{ + PB_CB_GOOD = 0, + PB_CB_BAD = 1, + PB_CB_BAD_BUFFER_SIZE = 2, + PB_CB_NULL_BUFFER = 3, + PB_CB_NULL_CBUFFER = 4 +}PB_CB_STATUS; + + +#if PB_CB_U8 +typedef struct p_cb_u8 +{ + uint8_t* buffer; + uint16_t head; + uint16_t max_len; + // Signifies the buffer being filled at least once. + // Useful for initializing sensor data + bool b_filled; + // Signifies the buffer being empty + // Useful for knowing if data is being received + bool b_empty; + + PB_CB_STATUS (*push)(struct p_cb_u8* cbuffer, uint8_t value); + PB_CB_STATUS (*empty)(struct p_cb_u8* cbuffer); +}p_cb_u8; + +PB_CB_STATUS p_cb_u8_init(p_cb_u8* circ_buffer, uint8_t* buff, uint32_t max_length); +#endif + +#if PB_CB_U16 +typedef struct p_cb_u16 +{ + uint16_t* buffer; + uint16_t head; + uint16_t max_len; + // Signifies the buffer being filled at least once. + // Useful for initializing sensor data + bool b_filled; + // Signifies the buffer being empty + // Useful for knowing if data is being received + bool b_empty; + + PB_CB_STATUS (*push)(struct p_cb_u16* cbuffer, uint16_t value); + PB_CB_STATUS (*empty)(struct p_cb_u16* cbuffer); +}p_cb_u16; + +PB_CB_STATUS p_cb_u16_init(p_cb_u16* circ_buffer, uint16_t* buff, uint32_t max_length); +#endif + +#if PB_CB_U32 +typedef struct p_cb_u32 +{ + uint32_t* buffer; + uint16_t head; + uint16_t max_len; + // Signifies the buffer being filled at least once. + // Useful for initializing sensor data + bool b_filled; + // Signifies the buffer being empty + // Useful for knowing if data is being received + bool b_empty; + + PB_CB_STATUS (*push)(struct p_cb_u32* cbuffer, uint32_t value); + PB_CB_STATUS (*empty)(struct p_cb_u32* cbuffer); +}p_cb_u32; + +PB_CB_STATUS p_cb_u32_init(p_cb_u32* circ_buffer, uint32_t* buff, uint32_t max_length); +#endif + + +#if PB_CB_U64 +typedef struct p_cb_u64 +{ + uint64_t* buffer; + uint16_t head; + uint16_t max_len; + // Signifies the buffer being filled at least once. + // Useful for initializing sensor data + bool b_filled; + // Signifies the buffer being empty + // Useful for knowing if data is being received + bool b_empty; + + PB_CB_STATUS (*push)(struct p_cb_u64* cbuffer, uint64_t value); + PB_CB_STATUS (*empty)(struct p_cb_u64* cbuffer); +}p_cb_u64; + +PB_CB_STATUS p_cb_u64_init(p_cb_u64* circ_buffer, uint64_t* buff, uint32_t max_length); +#endif + +#if PB_CB_FLOAT +typedef struct p_cb_float +{ + float* buffer; + uint16_t head; + uint16_t max_len; + // Signifies the buffer being filled at least once. + // Useful for initializing sensor data + bool b_filled; + // Signifies the buffer being empty + // Useful for knowing if data is being received + bool b_empty; + + PB_CB_STATUS (*push)(struct p_cb_float* cbuffer, float value); + PB_CB_STATUS (*empty)(struct p_cb_float* cbuffer); +}p_cb_float; + +PB_CB_STATUS p_cb_float_init(p_cb_float* circ_buffer, float* buff, uint32_t max_length); +#endif + +#if PB_CB_DOUBLE +typedef struct p_cb_double +{ + double* buffer; + uint16_t head; + uint16_t max_len; + // Signifies the buffer being filled at least once. + // Useful for initializing sensor data + bool b_filled; + // Signifies the buffer being empty + // Useful for knowing if data is being received + bool b_empty; + + PB_CB_STATUS (*push)(struct p_cb_double* cbuffer, double value); + PB_CB_STATUS (*empty)(struct p_cb_double* cbuffer); +}p_cb_double; + +PB_CB_STATUS p_cb_double_init(p_cb_double* circ_buffer, double* buff, uint32_t max_length); +#endif + + + + +#endif \ No newline at end of file diff --git a/CircularBuffer/src/PCircularBuffer.c b/CircularBuffer/src/PCircularBuffer.c new file mode 100644 index 0000000..9303571 --- /dev/null +++ b/CircularBuffer/src/PCircularBuffer.c @@ -0,0 +1,427 @@ +#include + +// Error handler used for debugging only +#ifdef PB_CB_DEBUG +#include +static void handle_status(const char* func, PB_CB_STATUS status_code) +{ + if(status_code != PB_CB_GOOD) + { + printf("%s failed: error code: %d\r\n", func, status_code); + } +} +#endif + +// Circular Buffer Prototypes -- uint8_t +#if PB_CB_U8 +static PB_CB_STATUS p_cb_u8_push(p_cb_double* cbuffer, uint8_t value); +static PB_CB_STATUS p_cb_u8_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u8_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u8_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- uint16_t +#if PB_CB_U16 +static PB_CB_STATUS p_cb_u16_push(p_cb_double* cbuffer, uint16_t value); +static PB_CB_STATUS p_cb_u16_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u16_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u16_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- uint32_t +#if PB_CB_U32 +static PB_CB_STATUS p_cb_u32_push(p_cb_double* cbuffer, uint32_t value); +static PB_CB_STATUS p_cb_u32_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u32_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u32_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- uint64_t +#if PB_CB_U64 +static PB_CB_STATUS p_cb_u64_push(p_cb_double* cbuffer, uint64_t value); +static PB_CB_STATUS p_cb_u64_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u64_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_u64_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int8_t +#if PB_CB_I8 +static PB_CB_STATUS p_cb_i8_push(p_cb_double* cbuffer, int8_t value); +static PB_CB_STATUS p_cb_i8_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i8_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i8_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int16_t +#if PB_CB_I16 +static PB_CB_STATUS p_cb_i16_push(p_cb_double* cbuffer, int16_t value); +static PB_CB_STATUS p_cb_i16_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i16_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i16_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int32_t +#if PB_CB_I32 +static PB_CB_STATUS p_cb_i32_push(p_cb_double* cbuffer, int32_t value); +static PB_CB_STATUS p_cb_i32_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i32_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i32_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int64_t +#if PB_CB_I64 +static PB_CB_STATUS p_cb_i64_push(p_cb_double* cbuffer, int64_t value); +static PB_CB_STATUS p_cb_i64_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i64_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_i64_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- Float +#if PB_CB_FLOAT +static PB_CB_STATUS p_cb_float_push(p_cb_double* cbuffer, float value); +static PB_CB_STATUS p_cb_float_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_float_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_float_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- Double +#if PB_CB_DOUBLE +static PB_CB_STATUS p_cb_double_push(p_cb_double* cbuffer, double value); +static PB_CB_STATUS p_cb_double_empty(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_double_is_full(p_cb_double* cbuffer); +static PB_CB_STATUS p_cb_double_is_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Definitions -- uint8_t +#if PB_CB_U8 +PB_CB_STATUS p_cb_u8_init(p_cb_u8* circ_buffer, uint8_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} + +PB_CB_STATUS p_cb_u8_push(p_cb_double* cbuffer, uint8_t value) +{ + +} +PB_CB_STATUS p_cb_u8_empty(p_cb_double* cbuffer) +{ + +} +#endif +// Circular Buffer Definitions -- uint16_t +#if PB_CB_U16 +PB_CB_STATUS p_cb_u16_init(p_cb_u16* circ_buffer, uint16_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u16_push(p_cb_double* cbuffer, uint16_t value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u16_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +// Circular Buffer Definitions -- uint32_t +#if PB_CB_U32 +PB_CB_STATUS p_cb_u32_init(p_cb_u32* circ_buffer, uint32_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u32_push(p_cb_double* cbuffer, uint32_t value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u32_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +// Circular Buffer Definitions -- uint64_t +#if PB_CB_U64 +PB_CB_STATUS p_cb_u64_init(p_cb_u64* circ_buffer, uint64_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u64_push(p_cb_double* cbuffer, uint64_t value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u64_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +#if PB_CB_FLOAT +PB_CB_STATUS p_cb_float_init(p_cb_float* circ_buffer, float* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_float_push(p_cb_double* cbuffer, float value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_float_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +// Circular Buffer Definitions -- double +#if PB_CB_DOUBLE +PB_CB_STATUS p_cb_double_init(p_cb_double* circ_buffer, double* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + circ_buffer->max_len = max_length; + circ_buffer->push = p_cb_double_push; + circ_buffer->empty = p_cb_double_empty; + circ_buffer->empty(circ_buffer); + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + + return ret; +} + +PB_CB_STATUS p_cb_double_push(p_cb_double* cbuffer, double value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + + if(!cbuffer) + { + ret = PB_CB_NULL_CBUFFER; + } + else + { + cbuffer->buffer[cbuffer->head] = value; + cbuffer->head = (cbuffer->head + 1) % cbuffer->max_len; + printf("head: %d\r\n", cbuffer->max_len); + } + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_double_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + + do + { + if(!cbuffer) + { + ret = PB_CB_NULL_CBUFFER; + break; + } + + if(!cbuffer->buffer) + { + ret = PB_CB_NULL_BUFFER; + break; + } + for(int ind = 0; ind < cbuffer->max_len; ind++) + { + cbuffer->buffer[ind] = 0.0; + } + cbuffer->head = 0; + cbuffer->b_empty = true; + cbuffer->b_filled = false; + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif diff --git a/CircularBuffer/test/test.c b/CircularBuffer/test/test.c new file mode 100644 index 0000000..e2ab91e --- /dev/null +++ b/CircularBuffer/test/test.c @@ -0,0 +1,21 @@ +#include +#include +int main() +{ + const uint16_t maxlength = 16; + double my_buffer[maxlength]; + p_cb_double data; + for(int ind = 0; ind < 2; ind++) + { + for(int x = 0; x < 16; x++) + { + printf("[%02d] Before: %02lf\t", x, data.buffer[x]); + data.push(&data, (double)x); + printf("[%02d] After: %02lf\r\n", x, data.buffer[x]); + } + } + + int x = 5; + printf("%d\r\n", x); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..263e790 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# PenguinBuffer