Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: sd-driver_compatible_with_MAX32630FTHR
Fork of CircularBufferSDCardLib by
Revision 5:0a4ff027086c, committed 2018-04-05
- Comitter:
- DVLevine
- Date:
- Thu Apr 05 04:08:32 2018 -0400
- Parent:
- 4:fe6d2823b7cb
- Child:
- 6:a36eda5701df
- Commit message:
- bugs ironed out. Uses circular buffer and saves information.
Some last bug where last data of row (third col) always shows up as some weird number. Fixing now...
Changed in this revision
--- a/dataRecorder.cpp Thu Apr 05 01:22:57 2018 -0400
+++ b/dataRecorder.cpp Thu Apr 05 04:08:32 2018 -0400
@@ -2,8 +2,6 @@
/* CONSTRUCTOR*/
DataRecorder::DataRecorder(){
-
- DataRecorder();
//Initialize SDCard Reader Class
m_saveBuddy = new SDCardReader();
@@ -24,6 +22,8 @@
uint16_t DataRecorder::popLastDataPoint(){
+ printf("pop data\n");
+
m_data_quantity--;
if (m_data_quantity<0){
m_data_quantity=0;
@@ -39,6 +39,7 @@
}
uint32_t DataRecorder::popLastTimeStamp(){
+ printf("pop time\n");
m_time_quantity--;
if (m_time_quantity<0){
m_time_quantity=0;
@@ -55,6 +56,7 @@
}
void DataRecorder::logDistancePoint(uint16_t value){
+ printf("push distance\n");
m_data_quantity++;
if (m_data_quantity>BUF_SIZE){
m_data_quantity=BUF_SIZE;
@@ -63,6 +65,7 @@
}
void DataRecorder::logTimeStamp(uint32_t value){
+ printf("push time\n");
m_time_quantity++;
if (m_time_quantity>BUF_SIZE){
m_time_quantity=BUF_SIZE;
@@ -70,24 +73,53 @@
m_buf_timestamp.push(value);
}
+//helpers
+int getoSize(int* p){
+ printf("reg p %i \n",sizeof(p));
+ printf("star p %i \n",sizeof(*p));
+
+ return (sizeof(p)/sizeof(*p));
+}
+
+int getoSize(uint16_t* p){
+ return (sizeof(p)/sizeof(*p));
+}
+
+
/** Save logged data to SD card **/
void DataRecorder::saveLoggedData(string filename){
//iterate over buffer and use the sd card commands
- int numPoints = m_data_quantity; //add check for timestamps
+
+ printf("before logging, data quantity is %i\n",m_data_quantity);
- int indexArr[m_data_quantity];
- for (int i = m_data_quantity; i >=0 ; i--){
+ int numPoints = m_data_quantity; //add check for timestamps
+
+ vector<int> indexArr(numPoints);
+ //int indexArr[numPoints];
+
+ //index setting
+ for (int i = numPoints-1; i >=0 ; i--){
indexArr[i] = i;
}
+
+ vector<uint32_t> timeArr(numPoints);
+ vector<vector <uint16_t> > allDataArr(numPoints);
- uint32_t timeArr[m_time_quantity];
- uint16_t* allDataArr[m_data_quantity];
+ //uint32_t timeArr[numPoints];
+ //uint16_t* allDataArr[numPoints];
for (int i = 0; i < numPoints; i++){
- uint16_t dataEntry[1];
- dataEntry[1] = popLastDataPoint();
+ //time aggregation
+ timeArr[i] = popLastTimeStamp();
+
+ //data aggregation
+ vector<uint16_t> dataEntry(1);
+ dataEntry[0] = popLastDataPoint();
allDataArr[i] = dataEntry;
+ printf("%i\n",static_cast<int>(dataEntry[0]));
}
+
+ printf("Before launch! size test %i \n",indexArr.size());
m_saveBuddy->fullWriteProcedure(filename,indexArr,timeArr,allDataArr);
}
--- a/main.cpp Thu Apr 05 01:22:57 2018 -0400
+++ b/main.cpp Thu Apr 05 04:08:32 2018 -0400
@@ -32,11 +32,11 @@
boba->logDistancePoint(d);
boba->logDistancePoint(e);
- boba->logTimeStamp(a);
- boba->logTimeStamp(b);
- boba->logTimeStamp(c);
- boba->logTimeStamp(d);
- boba->logTimeStamp(e);
+ boba->logTimeStamp(ta);
+ boba->logTimeStamp(tb);
+ boba->logTimeStamp(tc);
+ boba->logTimeStamp(td);
+ boba->logTimeStamp(te);
printf("about to save\n");
@@ -47,6 +47,5 @@
printf("saved\n");
led1 = !led1;
-
}
--- a/sdCardReader.cpp Thu Apr 05 01:22:57 2018 -0400
+++ b/sdCardReader.cpp Thu Apr 05 04:08:32 2018 -0400
@@ -3,6 +3,9 @@
//helpers
int getSize(int* p){
+ printf("reg p %i \n",sizeof(p));
+ printf("star p %i \n",sizeof(*p));
+
return (sizeof(p)/sizeof(*p));
}
@@ -63,15 +66,17 @@
FILE *f = fileToUse;
printf("%s\n", (!f ? "Fail :(" : "OK"));
- printf("\rWriting 16 bit value: %" PRIu16, data);
+ //printf("\rWriting 16 bit value: % " PRIu16 " ", data);
+ printf("\rWriting 16 bit value %i ", static_cast<int>(data));
fflush(stdout);
int err = 0;
//write and check for error
if (endline){
- err = fprintf(f,"%" PRIu16 "\n",data);
+ err = fprintf(f,"%i\n",static_cast<int>(data));
+ //err = fprintf(f,"%" PRIu16 "\n",data);
}else{
- err = fprintf(f,"%" PRIu16,data);
+ err = fprintf(f,"%i " ,static_cast<int>(data));
}
if (err < 0) {
@@ -85,16 +90,17 @@
FILE *f = fileToUse;
printf("%s\n", (!f ? "Fail :(" : "OK"));
- printf("\rWriting 32 bit value: %" PRIu32, data);
- //printf("\rWriting datapoint %d", data);
+ //printf("\rWriting 32 bit value: %" PRIu32 " ", data);
+ printf("\rWriting 32 bit value %i ", static_cast<int>(data));
fflush(stdout);
int err = 0;
//write and check for error
if (endline){
- err = fprintf(f,"%" PRIu32 "\n",data);
+ //err = fprintf(f,"%" PRIu32 "\n",data);
+ err = fprintf(f,"%i\n",static_cast<int>(data));
}else{
- err = fprintf(f,"%" PRIu32,data);
+ err = fprintf(f,"%i ",static_cast<int>(data));
}
if (err < 0) {
@@ -117,11 +123,13 @@
}
}
-int SDCardReader::fullWriteProcedure(string filename,int* indexArr, uint32_t* timeArr, uint16_t** allData){
+int SDCardReader::fullWriteProcedure(string filename,vector<int> indexArr, vector<uint32_t> timeArr, vector<vector <uint16_t> > allData){
mountFileSystem();
FILE* theFile = openFile(filename);
- for (int i = 0; i<getSize(indexArr); i++){
+ printf("The size of indexArr is %i \n",indexArr.size());
+
+ for (unsigned int i = 0; i< indexArr.size(); i++){
writeDataPoint(theFile,indexArr[i],timeArr[i], allData[i]);
}
@@ -134,7 +142,7 @@
//use circular buffers instead of strings
//write as 1st column, index. 2nd column timestamp. 3rd column data1. 4th data2. etc.
//pass in array of circular buffers
-int SDCardReader::writeDataPoint(FILE* theFile, int index, uint32_t timestamp, uint16_t* data){
+int SDCardReader::writeDataPoint(FILE* theFile, int index, uint32_t timestamp, vector<uint16_t> data){
// FILE* theFile = openFile(filename);
//write index
@@ -143,17 +151,11 @@
write_uint32_t(timestamp, false, theFile);
//write data
- for (int i = 0; i < getSize(data)-1; i++) {
+ for (unsigned int i = 0; i < data.size()-1; i++) {
write_uint16_t(data[i], false, theFile);
}
- write_uint16_t(data[getSize(data)], false, theFile);
-
- closeFile(theFile);
-
- // call the SDBlockDevice instance de-initialisation method.
- this->deinit();
-
- return 0;
+ write_uint16_t(data[data.size()], true, theFile);
+ return 0;
}
int SDCardReader::eraseData(){
--- a/sdCardReader.h Thu Apr 05 01:22:57 2018 -0400 +++ b/sdCardReader.h Thu Apr 05 04:08:32 2018 -0400 @@ -24,10 +24,10 @@ FILE* openFile(string filename); void closeFile(FILE* fileToClose); - int writeDataPoint(FILE* theFile, int index, uint32_t timestamp, uint16_t* data); + int writeDataPoint(FILE* theFile, int index, uint32_t timestamp, vector<uint16_t> data); int eraseData(); - int fullWriteProcedure(string filename,int* indexArr, uint32_t* timeArr, uint16_t** allData); + int fullWriteProcedure(string filename,vector<int> indexArr, vector<uint32_t> timeArr, vector<vector <uint16_t> > allData); void mountFileSystem(); void unmountFileSystem();
