trabalho

Dependencies:   X_NUCLEO_IKS01A1 mbed-rtos mbed

Fork of HelloWorld_IKS01A1 by ST

Committer:
Jacinta
Date:
Tue May 10 11:19:21 2016 +0000
Revision:
33:115aa467b4fa
Parent:
31:eb7320bd1d37
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stwykd 26:71c54c8ae536 1 #include "mbed.h"
stwykd 26:71c54c8ae536 2 #include "rtos.h"
stwykd 26:71c54c8ae536 3 #include "string.h"
stwykd 26:71c54c8ae536 4 #include <stdio.h>
stwykd 26:71c54c8ae536 5 #include <ctype.h>
stwykd 26:71c54c8ae536 6
stwykd 26:71c54c8ae536 7 // A First-In-First-Out buffer is used with streams of data.
stwykd 26:71c54c8ae536 8 // It is thread-safe and often used to buffer data across threads
stwykd 26:71c54c8ae536 9
stwykd 26:71c54c8ae536 10 #define BUFFERSIZE 100
Jacinta 31:eb7320bd1d37 11 /*
stwykd 26:71c54c8ae536 12 typedef struct {
stwykd 26:71c54c8ae536 13 uint8_t id;
stwykd 27:0bbc1d575986 14 float tempCelsius;
stwykd 26:71c54c8ae536 15 float tempFarenheit;
stwykd 26:71c54c8ae536 16 float humidity;
stwykd 26:71c54c8ae536 17 float pressure;
stwykd 27:0bbc1d575986 18 int32_t accelerometer[3];
stwykd 27:0bbc1d575986 19 int32_t gyroscope[3];
stwykd 27:0bbc1d575986 20 int32_t magnetometer[3];
stwykd 26:71c54c8ae536 21 char* date;
stwykd 26:71c54c8ae536 22 } log_data;
stwykd 26:71c54c8ae536 23
stwykd 26:71c54c8ae536 24 Semaphore *spaceAvailable;
stwykd 26:71c54c8ae536 25 Semaphore *samplesInBuffer;
stwykd 26:71c54c8ae536 26 Mutex *bufferLock;
stwykd 26:71c54c8ae536 27
stwykd 26:71c54c8ae536 28 log_data buffer[BUFFERSIZE];
stwykd 26:71c54c8ae536 29 unsigned int newestIndex = BUFFERSIZE-1;
stwykd 26:71c54c8ae536 30 unsigned int oldestIndex = BUFFERSIZE-1;
stwykd 26:71c54c8ae536 31
stwykd 26:71c54c8ae536 32 class Buffer {
stwykd 26:71c54c8ae536 33 public:
stwykd 26:71c54c8ae536 34 void addDataToQueue(log_data d) {
stwykd 26:71c54c8ae536 35 // Check whether there's space
stwykd 26:71c54c8ae536 36 int32_t Nspaces = spaceAvailable->wait();
stwykd 26:71c54c8ae536 37
stwykd 26:71c54c8ae536 38 // If there's space, use the mutex
stwykd 26:71c54c8ae536 39 bufferLock->lock();
stwykd 26:71c54c8ae536 40
stwykd 26:71c54c8ae536 41 // Update buffer
stwykd 26:71c54c8ae536 42 newestIndex = (newestIndex+1) % BUFFERSIZE;
stwykd 26:71c54c8ae536 43 buffer[newestIndex] = d;
stwykd 26:71c54c8ae536 44 printf("\tAdded log_data id %d to buffer, %d space available\n",
stwykd 26:71c54c8ae536 45 unsigned(d.id), Nspaces-1);
stwykd 26:71c54c8ae536 46
stwykd 26:71c54c8ae536 47 bufferLock->unlock();
stwykd 26:71c54c8ae536 48
stwykd 26:71c54c8ae536 49 // Signal that a sample has been added
stwykd 26:71c54c8ae536 50 samplesInBuffer->release();
stwykd 26:71c54c8ae536 51 }
stwykd 26:71c54c8ae536 52
stwykd 26:71c54c8ae536 53 log_data takeCharacterFromQueue(){
stwykd 26:71c54c8ae536 54 // Check whether there are samples
stwykd 26:71c54c8ae536 55 int32_t Nsamples = samplesInBuffer->wait();
stwykd 26:71c54c8ae536 56
stwykd 26:71c54c8ae536 57 bufferLock->lock();
stwykd 26:71c54c8ae536 58
stwykd 26:71c54c8ae536 59 oldestIndex = (oldestIndex+1) % BUFFERSIZE;
stwykd 26:71c54c8ae536 60 log_data d = buffer[oldestIndex];
stwykd 26:71c54c8ae536 61 printf("\tRemoved log_data id %d from buffer, %d bytes remaining\n",
stwykd 26:71c54c8ae536 62 unsigned(d.id), Nsamples-1);
stwykd 26:71c54c8ae536 63
stwykd 26:71c54c8ae536 64 bufferLock->unlock();
stwykd 26:71c54c8ae536 65
stwykd 26:71c54c8ae536 66 //Signal there's space in the buffer
stwykd 26:71c54c8ae536 67 spaceAvailable->release();
stwykd 26:71c54c8ae536 68
stwykd 26:71c54c8ae536 69 return d;
stwykd 26:71c54c8ae536 70 }
stwykd 26:71c54c8ae536 71
stwykd 26:71c54c8ae536 72 Buffer() {
stwykd 26:71c54c8ae536 73 bufferLock = new Mutex();
stwykd 26:71c54c8ae536 74 spaceAvailable = new Semaphore(BUFFERSIZE);
stwykd 26:71c54c8ae536 75 samplesInBuffer = new Semaphore(0);
stwykd 26:71c54c8ae536 76 }
Jacinta 31:eb7320bd1d37 77 };
Jacinta 31:eb7320bd1d37 78 */