2024-04-23 07:51:41 发布
网友
我想通过串行端口与电话通信。在给phone写了一些命令之后,我使用ser.read(ser.inWaiting())来获取它的返回值,但是我总是得到字符总数,实际上,期望的返回应该超过50KB。
ser.read(ser.inWaiting())
50KB
我试过设置ser.read(50000),但翻译会坚持。
ser.read(50000)
如何扩展输入缓冲区以同时获取所有返回?
如果在Windows平台上运行代码,只需在代码中添加一行即可。
ser.set_buffer_size(rx_size = 12800, tx_size = 12800)
其中12800是我选择的任意数字。您可以使接收(rx)和发送(tx)缓冲区大到2147483647(等于2^31-1)
这将允许您扩展输入缓冲区以同时获取所有返回。
请注意,这只适用于某些驾驶员,因为这是一个建议。驱动程序可能不接受您的建议,并将保持其“原始缓冲区大小”。
我也遇到过同样的问题,包括1020字节的缓冲区大小,但还没有找到改变的方法。我的解决方案是实现如下循环:
in_buff='' while mbed.inWaiting(): in_buff+=mbed.read(mbed.inWaiting()) #read the contents of the buffer time.sleep(0.11) #depending on your hardware, it can take time to refill the buffer
如果有人能想出缓冲区大小的解决方案,我会非常高兴!
我猜您正在读取1020字节,因为这就是缓冲区中的所有内容,这就是ser.inWaiting()返回的内容。根据波特率的不同,传输50kb可能需要一段时间,或者手机希望与您有所不同。握手?
检查ser.in waiting的值,然后检查接收到的内容以获取提示。
如果在Windows平台上运行代码,只需在代码中添加一行即可。
其中12800是我选择的任意数字。您可以使接收(rx)和发送(tx)缓冲区大到2147483647(等于2^31-1)
这将允许您扩展输入缓冲区以同时获取所有返回。
请注意,这只适用于某些驾驶员,因为这是一个建议。驱动程序可能不接受您的建议,并将保持其“原始缓冲区大小”。
我也遇到过同样的问题,包括1020字节的缓冲区大小,但还没有找到改变的方法。我的解决方案是实现如下循环:
如果有人能想出缓冲区大小的解决方案,我会非常高兴!
我猜您正在读取1020字节,因为这就是缓冲区中的所有内容,这就是ser.inWaiting()返回的内容。根据波特率的不同,传输50kb可能需要一段时间,或者手机希望与您有所不同。握手?
检查ser.in waiting的值,然后检查接收到的内容以获取提示。
相关问题 更多 >
编程相关推荐