• 5506阅读
  • 5回复

[提问]串口采集数据,如何将数据直接存倒SD卡中 [复制链接]

上一主题 下一主题
离线haoyunp
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-11
我从串口采集数据,每秒采集4组,每组6个字节,然后把数据存在SD卡中。
现在打开文件的方式为:file.open(QIODevice::WriteOnly | QIODevice::Append);
每次写完一组数据后,用file.flush();刷新缓冲区。但是存储了一段时间后,发现缓冲区没及时刷新,如:存储两个小时后读取数据,只有1个半小时的数据,再过一段时间读取,才有后来半个小时的数据。如果不调用file.flush();的话只能关闭文件的时候才能刷新缓冲区。请问是存储的数据量大吗?但是存储9个小时才1M的数据量,我采用的是数据流的方式存储在二进制文件中,我试着转储一个20M的文件才1分钟,但是提示转储完成后还要等几分钟才能将缓冲区的数据写入SD卡。
请问是什么原因呢?怎么能解决呢?这样存储数据的话每天都要丢一部分数据。
如改为  file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Unbuffered );方式后,不用加file.flush();也可保存数据,但仍出现以上问题
存储数据代码为:
  1. void MainWindow::save_com_file(unsigned char f)
  2. {
  3. now_time=QTime ::currentTime();
  4. QDataStream save(&file_name[f]);
  5. save<<now_time;
  6. save << jdq_data[f].new_data;}


离线haoyunp
只看该作者 1楼 发表于: 2011-08-12
大家有没有什么好的办法呢
离线haoyunp
只看该作者 2楼 发表于: 2011-08-12
今天又测了测,发现每10分钟就少3分钟的数据,即使把串口发送数据量改为10s发送一组数据后,结果也是这样
请问大家到底是什么原因呢?
离线haoyunp
只看该作者 3楼 发表于: 2011-08-12
这是我的文件,mainwindow中读取串口数据并存储倒SD卡中,form将SD卡中文件转储倒U盘中
附件: jdqjc.rar (247 K) 下载次数:49
离线haoyunp
只看该作者 4楼 发表于: 2011-08-13
找到问题了,是读取数据有误,存储数据并没问题。size(结构)应为6个字节,结果为8个。所以致使读取文件时计算记录条数有误。
离线haoyunp
只看该作者 5楼 发表于: 2011-08-13
快速回复
限100 字节
 
上一个 下一个