add .gitignore, first changes of ringbuffer

This commit is contained in:
2020-06-17 09:32:36 +02:00
parent 9552a54c3d
commit d5e7b8b149
3 changed files with 49 additions and 33 deletions

7
.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
*.o
*.pyc
*~
.*~
.bash_history
mqttauditing

View File

@ -1,51 +1,47 @@
#include <stdint.h> #include <stdint.h>
#include <pthread.h> #include <pthread.h>
#include "ringbuffer.h"
#define BUFFER_SIZE 256
uint32_t buffer[BUFFER_SIZE+5];
uint32_t bufferReadIdx = 0;
uint32_t bufferWriteIdx = 0;
pthread_mutex_t eventMutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t eventSignal = PTHREAD_COND_INITIALIZER;
void ringbufferInit(t_ringbuffer *handle) {
handle->bufferReadIdx = 0;
handle->bufferWriteIdx = 0;
pthread_mutex_init(&(handle->eventMutex), NULL);
pthread_cond_init(&(handle->eventSignal), NULL);
}
void ringbufferPut(uint32_t f) { void ringbufferPut(t_ringbuffer *handle, void *f) {
if (bufferWriteIdx == (BUFFER_SIZE - 1)) { if (handle->bufferWriteIdx == (BUFFER_SIZE - 1)) {
while (bufferReadIdx == BUFFER_SIZE); while (handle->bufferReadIdx == BUFFER_SIZE);
} else { } else {
while (bufferReadIdx == (bufferWriteIdx + 1)); while (handle->bufferReadIdx == (handle->bufferWriteIdx + 1));
} }
buffer[bufferWriteIdx] = f; handle->buffer[handle->bufferWriteIdx] = f;
bufferWriteIdx++; handle->bufferWriteIdx++;
if (bufferWriteIdx > BUFFER_SIZE) { if (handle->bufferWriteIdx > BUFFER_SIZE) {
bufferWriteIdx = 0; handle->bufferWriteIdx = 0;
} }
pthread_mutex_lock(&eventMutex); pthread_mutex_lock(&(handle->eventMutex));
pthread_cond_signal(&eventSignal); pthread_cond_signal(&(handle->eventSignal));
pthread_mutex_unlock(&eventMutex); pthread_mutex_unlock(&(handle->eventMutex));
} }
uint32_t ringbufferGet() { void *ringbufferGet(t_ringbuffer *handle) {
if (bufferReadIdx == bufferWriteIdx) { if (handle->bufferReadIdx == handle->bufferWriteIdx) {
pthread_mutex_lock(&eventMutex); pthread_mutex_lock(&(handle->eventMutex));
pthread_cond_wait(&eventSignal, &eventMutex); pthread_cond_wait(&(handle->eventSignal), &(handle->eventMutex));
pthread_mutex_unlock(&eventMutex); pthread_mutex_unlock(&(handle->eventMutex));
} }
double res = buffer[bufferReadIdx]; void *res = handle->buffer[handle->bufferReadIdx];
bufferReadIdx++; handle->bufferReadIdx++;
if (bufferReadIdx > BUFFER_SIZE) { if (handle->bufferReadIdx > BUFFER_SIZE) {
bufferReadIdx = 0; handle->bufferReadIdx = 0;
} }
return res; return res;
} }

View File

@ -2,8 +2,21 @@
#define _RINGBUFFER_H_ #define _RINGBUFFER_H_
#include <stdint.h> #include <stdint.h>
#include <pthread.h>
void ringbufferPut(uint32_t f);
uint32_t ringbufferGet(); #define BUFFER_SIZE 256
typedef struct {
void* buffer[BUFFER_SIZE+5];
uint32_t bufferReadIdx;
uint32_t bufferWriteIdx;
pthread_mutex_t eventMutex;
pthread_cond_t eventSignal;
} t_ringbuffer;
void ringbufferInit(t_ringbuffer *handle);
void ringbufferPut(t_ringbuffer *handle, void *f);
void *ringbufferGet(t_ringbuffer *handle);
#endif // _RINGBUFFER_H_ #endif // _RINGBUFFER_H_