有没有办法捕获和写入非常快的串行数据到文件?
我使用32kSPS外部ADC,波特率为2000000,同时按以下格式打印:adc_value(32bits)\ t millis()
这导致每1毫秒打印~15次。不幸的是,我尝试过的每一个单独的搜索都无法捕获并将实时数据存储到文件中。这包括:处理草图,TeraTerm,串行端口监视器,puTTY和一些Python脚本。所有这些都无法实时记录数据。 另一方面,Arduino Serial Monitor能够显示实时串行数据,但由于缺少此功能,因此无法将其记录在文件中。
这是Arduino中串行监视器的打印屏幕,带有输入数据:
答案 0 :(得分:2)
一个有问题的事情可能是您每次收到新记录时都会尝试写入。这将浪费大量时间来编写数据。
而是尝试将数据收集到缓冲区中,并且当缓冲区即将溢出时,将整个缓冲区写入单个且尽可能低的写入调用。
为了不停止接收数据,你可以使用线程和双缓冲:在一个线程中接收数据,写入缓冲区。当缓冲区即将溢出信号时,第二个线程切换到第二个缓冲区。另一个线程获取完整缓冲区并将其写入磁盘,并等待下一个缓冲区变满。
答案 1 :(得分:0)
在为这个问题尝试了10多个可能的解决方案之后,包括专用串行捕获软件,python脚本,Matlab脚本和一些C项目替代方案,唯一一个对我有用的方法证明是MegunoLink Pro。
它没有达到ADC的全部32kSPS电位,而是大约12-15kSPS,但它仍然比我尝试的任何东西都要好得多。
未实现完整的32kSPS也可能受到我用于将值打印到串行控制台的Serial.print()方法的限制。顺便说一句,我一直在使用的平台是ESP32。
稍后编辑:不要忘记在MegunoLink Pro安装目录中编辑 MegunoLinkPro.exe.config 文件,以便添加更多的波特率,如1000000或2000000.默认情况下,它仅限于500000。