[经验知识] 485通讯偶尔出现第一个字节或者前两个字节丢失

[复制链接]
 楼主| 影烛光 发表于 2020-12-26 21:36 | 显示全部楼层
sszxxm 发表于 2020-12-26 17:48
RS485通信,有个特别要注意到地方:不管主机还是从机,发送方发完了数据,一定要把总线及时释放,否则容易 ...

我把延时设置为到50ms了还是会出现
 楼主| 影烛光 发表于 2020-12-27 14:03 | 显示全部楼层
谢谢各位大佬们提的宝贵意见和想法,问题已经解决了。是我在主程序中处理接收的程序和中断发生重合了,然后刚好丢失第一或者前两个字节了
zyj9490 发表于 2020-12-27 14:50 | 显示全部楼层
影烛光 发表于 2020-12-27 14:03
谢谢各位大佬们提的宝贵意见和想法,问题已经解决了。是我在主程序中处理接收的程序和中断发生重合了,然后 ...

二线程不同步机制吗?
 楼主| 影烛光 发表于 2020-12-28 09:57 | 显示全部楼层
zyj9490 发表于 2020-12-27 14:50
二线程不同步机制吗?

是的,没有协调好,谢谢!
Jack315 发表于 2020-12-28 10:44 | 显示全部楼层
本帖最后由 Jack315 于 2020-12-28 13:22 编辑

有个做状态机的工具推荐下:IAR 的 VisualState (V6.4)

这个工具可以对状态机建模、仿真。成功后可以生成 C 代码。
C++ 代码貌似也可以的,只是没试过。

LZ 的这个应用应该能用得上这个工具。
有兴趣的话 LZ 可以试试。
 楼主| 影烛光 发表于 2020-12-29 10:30 | 显示全部楼层
Jack315 发表于 2020-12-28 10:44
有个做状态机的工具推荐下:IAR 的 VisualState (V6.4)

这个工具可以对状态机建模、仿真。成功后可以生成  ...

好的,谢谢推荐
zyj9490 发表于 2021-3-12 16:03 | 显示全部楼层
影烛光 发表于 2020-12-27 14:03
谢谢各位大佬们提的宝贵意见和想法,问题已经解决了。是我在主程序中处理接收的程序和中断发生重合了,然后 ...

如果采用接收中断的话,只会延时,不会丢失字节,除非长时间中断占用,接收中断没有响应,导致字节OVERWRITE.导致错误。如果轮询的方式处理接收事件,那就没办法了。
wooda 发表于 2021-3-12 23:05 | 显示全部楼层
本帖最后由 wooda 于 2021-3-12 23:06 编辑
zyj9490 发表于 2021-3-12 16:03
如果采用接收中断的话,只会延时,不会丢失字节,除非长时间中断占用,接收中断没有响应,导致字节OVERWRI ...

他估计是接收和处理用得同一个缓冲。
接收再处理的时候又发生了中断,然后就gg了
建议是中断里面数据往buf扔,接收处理程序上手第一时间memcpy到自己的buf里面慢慢处理,中断和接收处理程序之间用咯标志位做互锁保护数据不被冲掉。
还有个办法就是环表,只要2倍或者1.5倍,写的效率高一点可以接近1.1或者类似比例,就能保证不被冲。可以设标志位检查有没有头尾撞车,撞车了就设大一点。。不过环表如果撞车,就是数据量太大,设大一点也只能提高峰值能力,不能提高平均能力
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部