在Gnuradio块中,我有一个触发器,它应该开始将数据写入文件一段时间。在"工作"函数写作部分出现在这段代码中:
if(counter!=0){
...
if(trigger==1){
counter = num_of_samples;
of = fopen(filename,"ab");
setbuf(of,buffer);
}
...
}else{//Write to file occurs here.
fwrite(i0,sizeof(float),1,of);
fwrite(q0,sizeof(float),1,of);
fwrite(i1,sizeof(float),1,of);
fwrite(q1,sizeof(float),1,of);
counter --;
if(counter == 0){
fflush(of);
fclose(of);
}
}
意图是" num_of_samples"次数,4个浮点输入以二进制形式写入" filename"指定的某个文件的末尾。
这样可以正常工作,但问题是大量数据(例如200 MB),此过程大约需要10分钟才能完成所有写入操作。如果我正在编写少量数据,例如300个样本,它会很快发生,所以我认为问题出现在" else"部分代码,因为这是在更大的循环运行时运行的。
我知道有一种写法比这更快,因为当使用" file_sink"在Gnuradio中阻塞,它使用相同的fwrite函数,它可以在瞬间写入大量数据。但由于某种原因,这段代码要慢得多。(有一个" tagged_file_sink"块基本上可以完成这段代码应该做的事情,但它有一个让我无法使用的错误,所以我需要写我自己的。)
我可以更快地将数据写入文件吗?