缓冲区中的实时数据存储 @ Visual Studio 2013 Professional C++ Windows 7

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

目前,我正在使用 Visual Studio C++ 开发实时接口。

我遇到的问题是,当缓冲区 运行 用于数据存储时,此时 .exe 在缓冲区中的数据存储点没有响应。我从运动传感器收集 130Hz 的数据。我试过增加电脑的虚拟内存,但问题没有解决

代码结构:

    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");

    }

您发布的代码没有显示您如何在需要时为 before_trial_output_data 缓冲区分配更多内存。要我猜吗?我猜你正在使用 realloc() 的某种风格,它需要分配不断增加的内存量,使你的堆非常碎片化。

但是,为了稍后将该数据保存到文件中,它不需要在连续的内存中,因此某种列表比数组更好。

此外,您的 "pseudo" 代码中没有提供 130Hz 读数;它尽可能快地处理记录,我的猜测是 - 快得多。

你的 prinf() 调用也是 "pseudo code" 吗?否则,您会因 % 格式规范与传入参数的数量和类型不匹配而自找麻烦。