使用小鱼的串口代码间歇性串口打开失败
-
@sen 这个你把返回的所有数据打印出来瞅瞅就可以给问题定位了,是没收到还是没发过来,都加个时间戳看看
-
@小鱼 小鱼,今天又出现了打开后出错的情况,如下:
最开始怀疑是数据量太大,做了几次测试之后,发现如果在启动串口时,缓存区已有大量数据,则会导致出错。如果启动时,缓存区数据较少,则可以正常使用,请问小鱼有解决办法吗? -
此回复已被删除! -
@sen 感谢反馈,我又仔细去看了下代码,问题是出在了,打开串口和设置回调函数的顺序问题,先打开了串口后设置了回调函数,如果此时有数据就没有办法进入回调.目前猜测最有可能是这里造成的问题,你可以将设置回调函数放在对串口对象的构造中,然后在构造函数里就完成对回调函数的设置,这样应该就没有问题了.
祝好!
-
@小鱼 小鱼你好,你的代码里面定义回调函数使用的是lambda函数体,我不太了解应该怎么将其放在串口对象的构造函数中,之前试过使用普通函数定义回调,但是编译有问题,请问能帮忙修改一下吗?谢谢小鱼了。
-
@sen 最近抽个空我更新一下,更新后再回复
-
@小鱼 好的,麻烦小鱼了!谢谢!
-
@sen 问题应该已经修复了,加了一个判断,回调函数不为空时再进行调用。
你下载最新的代码试试看~,或者直接在自己的程序上加上这个判断
if (bytes_transferred > 0) { std::string data_str(recv_data_buffer_, bytes_transferred); if (recv_data_callback_) { // 回调数据 recv_data_callback_(data_str); }
-
-
@小鱼 好的,我找时间试试,谢谢小鱼!
-
@小鱼 刚才测试了一下,暂时未出现过之前的问题了。不过我又有了新问题了 ,请问小鱼,使用异步读取的时候 进入一次回调函数最多的数据量为32bytes(我这边测试最多出现过32bytes),请问有什么办法能提高这个“进入一次回调函数的最大数据量”吗?谢谢小鱼了
-
@sen 可以尝试增加单次处理回调的处理时间,也就是在回调函数里休眠,或者要改一下程序,把多次接收的数据进行保存,满足条件后调用回调
-
@小鱼 好的,谢谢小鱼!