项目板子有两个485接口,消息块以结构体指针的形式传输;
内存使用的log很稳定,应该不存在内存的溢出
板子通过485口1(波特率115200)同传感器相连,发modbus命令读寄存器;
然后发送端是板子的另一个485口2(波特率9600),接一个外部的RTU;
RTU可以简单理解为信号发送端,将modbus命令发送至485口2(板子这个口用485recv函数持续监听),然后通过我的板子(烧录了我写的消息中间件代码),将RTU这个设备发的modbus命令转发到485口1连接的传感器;
我的中间件代码负责处理传感器返回的数据,最后回传给外部的RTU;
中间件有很多处理流程,会把部分数据上传网络,但我现在把这些流程都屏蔽了,只留下以上所述的一条路径,专门调试其中(RTU->中间转发设备->传感器->中间转发设备->RTU)的延时(总延时目前用示波器看到是365ms的水平),发现几个问题或者说是可以优化的地方
msg_dispatcher.c
msg_dispatcher.h
msg_Modbus.c
msg_Modbus.h
主程序.c
因为项目对中间件转发延时是有要求的,要尽可能压缩其中的耗时操作(比如压缩这个延迟到200ms)
以下为log打印

现在主要碰到:
1、rt_mb_send()/rt_mq_send()函数耗时30ms。队列换邮箱无任何改善,其实队列里面本来也传的结构体指针。
2、线程中的485口1的485sendthenrecv耗时70ms超过了byte_tmo(30ms),这个是正常了,因为传感器断帧50ms。
3、从485sendthenrecv(485口1)到from_msg_send->send_cb(recv_buffer, recv_len)之间的校验过程花费30~40ms。
4、回调modbus数据发回给msg_cb_to_rtu的485(485口2)单纯一个发send操作竟然耗时60ms,但我byte_tmo设置才25ms。
如果耗时是合理的,希望也能得到相应的解答
该关闭的线程都关的差不多了,唯二的两个线程优先级调高不论是相同和不同,对延时都没有帮助
调整线程create的执行超时参数也无帮助
求助以上延时高的原因,欢迎大佬指正,定知无不言