我现在在一个嵌入式 LED 测量系统项目中。采用ARM & linux,64M内存,1G存储。测量时,应该将数据写入.csv 文件。我是这样做的:
- 在测量开始前创建/打开一个文件
- 在测量循环中,当数据准备好后,将其存入文件,然后进行下一次测量
- 当用户停止测量时,文件将被关闭
但是,当我添加此功能时,程序会持续运行几个小时,然后机器将无任何响应(测量停止、UI 仍显示但不响应任何操作等)。 csv 文件大约 15MB。 如果没有此功能,机器可以全天正常工作。 这个我想过,可能是内存用完了。这么小的内存,是不是可以一直写一个文件呢?还是每次写完数据就关闭? (那样的话,我就不得不非常频繁地打开/关闭文件,这会导致我们的系统变慢,有什么不高兴的) 为我糟糕的英语道歉,也许有人能理解并给我一些帮助。 上帝在照亮你的道路,谢谢大家!
ps:我相信文件操作本身是正确的。
代码如下:
std::ofstream out_put;
out_put.open(filePath, std::ofstream::out | std::ofstream::trunc);
while(!userStoped()){
doSomeMesuring();
for(int itemIndex = 0; itemIndex < itemCount; ++itemIndex){
out_put << ',' << itemName.toStdString() << ','
<< data->mdata.item[itemIndex].mvalue << ','
<< data->mdata.item[itemIndex].judge << std::endl;
}
}
out_put.close();
最佳答案
您写入“out_put”,ofstream,但从不检查流是否仍然有效。 你可以把它改成
while (out_put.good() && (!userStoped())
为了向自己证明是写入流导致了问题,请注释掉所有测量代码,只需将大量“x”(或您选择的字符!)写入流以查看是否你有相同的结果。
关于C++ 文件操作在嵌入式 Linux 上导致 "crash",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416934/