我正在通过串口以 921600 的波特率从微控制器读取数据。我正在读取大量 ASCII csv 数据,由于数据输入速度如此之快,缓冲区已被填满,所有其余数据都会在之前丢失我能读懂。我知道我可以手动编辑serialwin32的pyserial源代码以增加缓冲区大小,但我想知道是否还有其他方法?
我只能估计我将收到的数据量,但大约是 200kB 的数据。
您是否考虑过在运行的单独线程中从串行接口读取数据prior发送命令给uC发送数据?
这将消除写入命令和开始读取之后的一些延迟。有其他SO用户那些使用这种方法取得成功的人,假设他们没有缓冲区溢出。
如果不清楚,请告诉我,我可以拼凑一些东西来展示这一点。
EDIT
再想一想,如果您尝试从缓冲区读取并将其写入文件系统,即使独立线程也可能无法拯救您。为了最大限度地减少处理时间,您可以考虑一次读取 100 个字节serial.Read(size=100)
并在传输完成后将数据推送到队列中进行处理
伪代码示例
def thread_main_loop(myserialobj, data_queue):
data_queue.put_no_wait(myserialobj.Read(size=100))
def process_queue_when_done(data_queue):
while(1):
if len(data_queue) > 0:
poped_data = data_queue.get_no_wait()
# Process the data as needed
else:
break;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)