缓冲区中的实时数据存储 @ 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" 吗?否则,您会因 % 格式规范与传入参数的数量和类型不匹配而自找麻烦。
目前,我正在使用 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" 吗?否则,您会因 % 格式规范与传入参数的数量和类型不匹配而自找麻烦。