运行libmodbus循环采集传感器数据,然后485转串口回传主芯片(stm32f429),但是每运行一段时间就会报如下图的警告,然后就无法接收到数据,
经过示波器的测量,主芯片仍在请求传感器数据,传感器也有回传数据,但是主芯片无法接收到数据内容,通过暂停请求半秒左右继续请求就恢复正常了,但是持续一段随机的时间就又出现异常。按理说每读取到一个数据缓冲区不久吧这个数据释放掉了吗,为什么缓冲区还会满?求大佬指导
应用层线程调用不及时,缓冲区的数据来不及取走,把整片内存剩余空间都留给串口都没用。
“按理说每读取到一个数据缓冲区不久吧这个数据释放掉了吗,为什么缓冲区还会满?”,解释一下这句。串口的缓冲区是一个 fifo 没有每次都申请或者不久释放的说法。可以和预约办理业务类比,预约人数有上限,人满了就不能预约了。有空余数才能继续预约。预约人比较多,办理业务慢,就出现很多人预约不了的情况;只有加快处理业务的吞吐量,才能从根本上解决问题。
是libmodbus里面加上这段代码,因为传输过程中信号线中可能会传过来乱码,导致发过来10个数你可能只取走了4个然后慢慢积累导致串口缓冲区填满,加上这个错误恢复模式,目前测试1小时没出现bug,明天跑长期试试
接收部分是libmodbus的官方代码,我再检查检查