【问题标题】:Real Time Data Store in Buffer @ Visual Studio 2013 Professional C++ Windows 7缓冲区中的实时数据存储 @ Visual Studio 2013 Professional C++ Windows 7
【发布时间】:2015-11-17 07:12:33
【问题描述】:

目前,我正在使用 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");

    }

【问题讨论】:

  • 我假设代码是某种伪代码,因为它不会编译?
  • 如果要编译可以使用鼠标坐标记录,但现在是运动传感器的伪代码。
  • Windows 不是实时操作系统。 “实时界面”的真正含义是什么?
  • Real rime 接口与传感器用于创建虚拟现实。

标签: c++ visual-studio visual-c++ real-time


【解决方案1】:

您发布的代码未显示在需要时如何为 before_trial_output_data 缓冲区分配更多内存。你要我猜吗?我猜你正在使用一些 realloc() 的风格,它需要分配越来越多的内存,严重地分割你的堆。

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

此外,您的“伪”代码中没有规定 130Hz 读数;它尽可能快地处理记录,我的猜测是 - 快得多。

您的 prinf() 调用也是“伪代码”吗?否则,您会因为 % 格式规范与传入参数的数量和类型不匹配而寻找麻烦。

【讨论】:

  • 我说的是sprintf(before_trial_output_data...)
  • 那么你有一个问题:你传递了6个格式指定,但只有3个参数。
  • 哦……对不起,我的错字在这里
  • 嗨,你能告诉我如何在 txt 文件上打印列表变量吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2013-12-02
相关资源
最近更新 更多