Initial commit

This commit is contained in:
2020-06-17 09:06:02 +02:00
commit 9552a54c3d
12 changed files with 185 additions and 0 deletions

53
ringbuffer.c Normal file
View File

@ -0,0 +1,53 @@
#include <stdint.h>
#include <pthread.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 ringbufferPut(uint32_t f) {
if (bufferWriteIdx == (BUFFER_SIZE - 1)) {
while (bufferReadIdx == BUFFER_SIZE);
} else {
while (bufferReadIdx == (bufferWriteIdx + 1));
}
buffer[bufferWriteIdx] = f;
bufferWriteIdx++;
if (bufferWriteIdx > BUFFER_SIZE) {
bufferWriteIdx = 0;
}
pthread_mutex_lock(&eventMutex);
pthread_cond_signal(&eventSignal);
pthread_mutex_unlock(&eventMutex);
}
uint32_t ringbufferGet() {
if (bufferReadIdx == bufferWriteIdx) {
pthread_mutex_lock(&eventMutex);
pthread_cond_wait(&eventSignal, &eventMutex);
pthread_mutex_unlock(&eventMutex);
}
double res = buffer[bufferReadIdx];
bufferReadIdx++;
if (bufferReadIdx > BUFFER_SIZE) {
bufferReadIdx = 0;
}
return res;
}