Latest
Dependencies: serial_terminal sample_hardware PLL_Config SDCard BMP280 Networkbits TextLCD SDBlockDevice
Diff: main.cpp
- Revision:
- 27:bb8d4c883e1b
- Parent:
- 26:94238a308ff9
- Child:
- 28:7fccaef8fa72
--- a/main.cpp Wed Dec 19 15:54:20 2018 +0000 +++ b/main.cpp Fri Dec 21 09:59:24 2018 +0000 @@ -18,8 +18,9 @@ //Global variables -unsigned int newestIndex = BUFFERSIZE-1; //First time it is incremented, it will be 0 -unsigned int oldestIndex = BUFFERSIZE-1; + +unsigned int newestIndex = 0; //First time it is incremented, it will be 0 +unsigned int oldestIndex = 0; FILE* fp; FATFileSystem* fs; @@ -79,6 +80,10 @@ Mutex SDlock; +//TEST FOR BUFFER CHANGES +unsigned int saveIndex = 0; + + int main() { timeData = new tm; pc = new RawSerial(USBTX, USBRX); @@ -152,26 +157,29 @@ while(true) { //High priority thread - Thread::signal_wait(TAKE_SAMPLE); - + Thread::signal_wait(TAKE_SAMPLE); //int32_t Nspaces = spaceAvailable.wait(); //Blocking if space is not available //Dont check if there is space available becuase we are overwriting + bufferLock.lock(); - //Update buffer - newestIndex = (newestIndex+1) % BUFFERSIZE; //CIRCULAR + //Update buffer buffer[newestIndex].updatetemp(sensor.getTemperature()); buffer[newestIndex].updatepress(sensor.getPressure()); buffer[newestIndex].updatelight(adcIn.read()); - buffer[newestIndex].updateTime(); - + buffer[newestIndex].updateTime(); + newestIndex = (newestIndex+1) % BUFFERSIZE; //CIRCULAR //bufferLock.unlock(); //normally here, moved due to updating queues. - samplesInBuffer.release(); - + samplesInBuffer.release(); + + if (newestIndex == oldestIndex) + { + oldestIndex = (oldestIndex+1) % BUFFERSIZE; + } + //Pass onto queues - LCDqueue.call(LCD_display, buffer[newestIndex].gettemp(),buffer[newestIndex].getpress(),buffer[newestIndex].getlight()); + LCDqueue.call(LCD_display, buffer[newestIndex-1].gettemp(),buffer[newestIndex-1].getpress(),buffer[newestIndex-1].getlight()); bufferLock.unlock(); - //Write to the SD card when i have 120 samples in the buffer - if (newestIndex == 119) + if (newestIndex == ((saveIndex + 60) % BUFFERSIZE)) //correct? { //save to SD card consumer_thread.signal_set(STORE_DATA); @@ -210,15 +218,23 @@ //Nested locks probably a bad idea! bufferLock.lock(); SDlock.lock(); - for (int i = 0; i<BUFFERSIZE; i++) - { - fprintf(fp,"%s,%5.2f,%5.2f,%5.2f\n\r", buffer[i].getTime(), buffer[i].gettemp(), buffer[i].getpress(), buffer[i].getlight()); + //read first then update oldestIndex? + int i = 0; + + while (saveIndex != newestIndex) + { + fprintf(fp,"%s,%5.2f,%5.2f,%5.2f\n\r", buffer[saveIndex].getTime(), buffer[saveIndex].gettemp(), buffer[saveIndex].getpress(), buffer[saveIndex].getlight()); + saveIndex = (saveIndex+1) % BUFFERSIZE; + i++; } SDlock.unlock(); bufferLock.unlock(); printlock.lock(); - pc->printf("SD card updated\r\n"); + pc->printf("SD card updated with %d samples\r\n", i); + pc->printf("oldestIndex : %d\n\r", oldestIndex); + pc->printf("newestIndex : %d\n\r", newestIndex); + pc->printf("saveIndex : %d\n\r", saveIndex); printlock.unlock(); } fclose(fp);