trabalho
Dependencies: X_NUCLEO_IKS01A1 mbed-rtos mbed
Fork of HelloWorld_IKS01A1 by
buffer.cpp
- Committer:
- Jacinta
- Date:
- 2016-05-10
- Revision:
- 33:115aa467b4fa
- Parent:
- 31:eb7320bd1d37
File content as of revision 33:115aa467b4fa:
#include "mbed.h"
#include "rtos.h"
#include "string.h"
#include <stdio.h>
#include <ctype.h>
// A First-In-First-Out buffer is used with streams of data.
// It is thread-safe and often used to buffer data across threads
#define BUFFERSIZE 100
/*
typedef struct {
uint8_t id;
float tempCelsius;
float tempFarenheit;
float humidity;
float pressure;
int32_t accelerometer[3];
int32_t gyroscope[3];
int32_t magnetometer[3];
char* date;
} log_data;
Semaphore *spaceAvailable;
Semaphore *samplesInBuffer;
Mutex *bufferLock;
log_data buffer[BUFFERSIZE];
unsigned int newestIndex = BUFFERSIZE-1;
unsigned int oldestIndex = BUFFERSIZE-1;
class Buffer {
public:
void addDataToQueue(log_data d) {
// Check whether there's space
int32_t Nspaces = spaceAvailable->wait();
// If there's space, use the mutex
bufferLock->lock();
// Update buffer
newestIndex = (newestIndex+1) % BUFFERSIZE;
buffer[newestIndex] = d;
printf("\tAdded log_data id %d to buffer, %d space available\n",
unsigned(d.id), Nspaces-1);
bufferLock->unlock();
// Signal that a sample has been added
samplesInBuffer->release();
}
log_data takeCharacterFromQueue(){
// Check whether there are samples
int32_t Nsamples = samplesInBuffer->wait();
bufferLock->lock();
oldestIndex = (oldestIndex+1) % BUFFERSIZE;
log_data d = buffer[oldestIndex];
printf("\tRemoved log_data id %d from buffer, %d bytes remaining\n",
unsigned(d.id), Nsamples-1);
bufferLock->unlock();
//Signal there's space in the buffer
spaceAvailable->release();
return d;
}
Buffer() {
bufferLock = new Mutex();
spaceAvailable = new Semaphore(BUFFERSIZE);
samplesInBuffer = new Semaphore(0);
}
};
*/

