前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不按标准引发的bug

不按标准引发的bug

作者头像
用户1605515
发布2018-04-11 10:56:23
7020
发布2018-04-11 10:56:23
举报
文章被收录于专栏:嵌入式程序猿

我们曾经在初级和中级培训中给大家详细讲解了Modbus通讯的开发,并多次强调了一定要按照标准协议的要求编写Modbus驱动程序,可是现实中仍然有很多工程师不按照标准,导致通讯中会出现bug,最近也有猿友微我说他的Modbus通信中有bug。经过详细沟通,知道他在帧完成检测和帧间字节检测时候没有严格按照标准。

小猿曾经在嵌入式培训中多次强调告诫大家Modbus通讯中帧完成检测,也就是我们常说的t3.5个字节的帧中断完成检测,和t1.5的字节间检测。在标准协议中明确要求,我们在来温习一下,希望大家牢记这段,因为这是Modbus驱动中最重要的部分。

其中t3.5的检测必须根据不同波特率做调整,在程序中比如9600波特率和19200波特率计算出来的值是不同的,例如9600波特率时候t3.5=1/9600 * 11 * 3.5 = 4.01ms, 而19200波特率时候t3.5计算出来应该为t3.5=1/19200 * 11 * 3.5 = 2.005ms,也就是说当波特率改变的时候,你的帧完成定时中断的定时器的值是不同的。如果按照相同的值来检测,那么通信就会出现bug。另一个常见的bug是因为没有做t1.5检测引入的,如上图所示,如果不做t1.5检测,那么不正常的帧2就会被认为是正常,引入通信bug。希望这两个地方引起大家的重视。

其实在标准协议中已经给出了程序的状态图,可以按照下面的图示开发你的程序就不会带来bug。

假如你的软件要过认证的话,如果你不按标准做,那么认证肯定过不了,因为认证就是按照标准做实验检测的,小猿一直有一个观点,就是有标准的东西一定要按照标准去实现,以标准为依据,依标准为指导,那么你就不会错,而且开发出的程序可移植性强,也比较专业。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档