Search code examples
c++visual-studiovisual-c++real-time

Real Time Data Store in Buffer @ Visual Studio 2013 Professional C++ Windows 7


Currently, I am working on real time interface with Visual Studio C++.

I faced problem is, when buffer is running for data store, that time .exe is not responding at the point data store in buffer. I collect data as 130Hz from motion sensor. I have tried to increase virtual memory of computer, but problem was not solved.

Code Structure:

    int main(){

    int no_data = 0;
    float x_abs;
    float y_abs;
    int sensorID = 0;
    while (1){
    // Define Buffer
        char before_trial_output_data[][8 * 4][128] = { { { 0, }, }, };
   // Collect Real Time Data
        x_abs = abs(inchtocm * record[sensorID].y);
        y_abs = abs(inchtocm * record[sensorID].x);
    //Save in buffer
        sprintf(before_trial_output_data[no_data][sensorID], "%d %8.3f %8.3f\n",no_data,x_abs,y_abs);
    //Increment point
        no_data++;
    // Break While loop, Press ESc key
    if (GetAsyncKeyState(VK_ESCAPE)){
                    break;
    }
    } 
    //Data Save in File
    printf("\nSaving results to 'RecordData.txt'..\n");

    FILE *fp3 = fopen("RecordData.dat", "w");
    for (i = 0; i<no_data-1; i++)
    fprintf(fp3, output_data[i][sensorID]);
    fclose(fp3);
    printf("Complete...\n");

    }

Solution

  • The code you posted doesn't show how you allocate more memory for your before_trial_output_data buffer when needed. Do you want me to guess? I guess you are using some flavor of realloc(), which needs to allocate ever-increasing amount of memory, fragmenting your heap terribly.

    However, in order for you to save that data to a file later on, it doesn't need to be in continuous memory, so some kind of list will work way better than an array.

    Also, there is no provision in your "pseudo" code for a 130Hz reading; it processes records as fast as possible, and my guess is - much faster.

    Is your prinf() call also a "pseudo code"? Otherwise you are looking for trouble by having mismatch of the % format specifications and number and type of parameters passed in.