美文网首页
LabVIEW计算CRC16的低级错误

LabVIEW计算CRC16的低级错误

作者: 刘小白DOER | 来源:发表于2021-03-26 22:27 被阅读0次

    最近困扰笔者的是一个通信设备的CRC16(循环冗余校验)的计算问题。设备协议是通过抓包得到的,但是CRC16校验一直不准确,最开始笔者因为CRC校验只有应用于modbus这一种,后来在领导的提点下才知道原来CRC16计算有很多公式。笔者在ip33网页上的CRC计算工具上面一个个试,发现居然没有一个是准确的,那就意味着不能准确定位到计算模型。

    那可能只有一种:设备的CRC循环冗余校验是自定义的参数模型。

    无从下手。从设备手册入手,以前看过手册给的C语言的计算方法,笔者以前根据这个计算方法挪到LabVIEW的公式节点(formula node)上计算结果与抓包结果也不一致,当时是放弃了。昨晚又看了一遍具体的说明,重新用公式节点编写手册中的计算方法,还是不准确!根据手册内的蛛丝马迹,最开始笔者以为是那里面的byte0没有写清除,于是加上DLE数据通信换码符(\),不对;加上确认06字符,不对;改变字节数组的顺序,还是不对。

    今天带娃期间,笔者也一直在想这个问题。今晚哄娃睡觉后,笔者再次打开昨晚写的公式节点,和以前的MODBUS CRC对比了一下,突然发现一个问题:公式节点不支持指针,公式节点照搬C语言时,自增i的问题,笔者将其写成了db = bufp[i++],  i重复自增了。C语言指针自增定位到字节数组的每一个字节,但是 bufp[i]已经在for循环中自增了。

    不动脑子的后果!同时在这一次计算中,笔者在数据操作中发现了两个函数:交换字节和交换字。还记得以前高低字节交换花了很大力气,移位啥的再组合,现在一个函数搞定,交换字可以交换高低16位的数字。

    有时候是需要一点灵感的,还记得大学毕业论文是角度和弧度没有转换导致计算错误,一直纠结了好久,突然有一天脑海突然浮现出角度要转换成弧度,那一刻感觉开光了。有时还得多想一想!最近发现系列文章-为什么这么设计(Why’s THE Design),计算机领域中一个具体的问题并从不同的角度讨论这种设计的优缺点,觉得很有意思。思维方式是要训练的,多学习多涉猎是一种保持头脑清醒,避免“犯困” 的方式。

相关文章

  • LabVIEW计算CRC16的低级错误

    最近困扰笔者的是一个通信设备的CRC16(循环冗余校验)的计算问题。设备协议是通过抓包得到的,但是CRC16校验一...

  • Android 依据字符串进行 CRC校验

    /** * 计算CRC16校验码 * * @param bytes 需要计算的字节数组 */publicstati...

  • 低级错误

    2018年2月10日晚上,我最亲爱的奶奶不幸与世长辞。 悼念持续18天。按照家乡的风俗习惯,期间要做道场,...

  • 低级错误

    今天写了一天的选择框...刚刚才算真正的完成, 开始有四个下拉选择 城市和 排序本来可以共用一个界面 一个下拉Vi...

  • 低级错误

    人难免犯错。有的是人的智力、能力所不能及,有的是不可抗力的因素,有点则是因为人的疏忽大意不经意间犯下本不应...

  • 低级错误

    我们到底是谁?首先我们是人,那应该是高级动物,但你信吗?我们每天都在犯低级错误。比如说想健康长寿的人很多,每天早晨...

  • 低级错误

    大家说说怎么能少犯低级错误呢?真的和用不用心有关系吗?为什么有时候明明已经很认真了还是会犯错。好讨厌这样!有时都过...

  • 低级错误

    工作的地方离家只有12分钟的骑车距离,并且有专用的骑车道,不用走到机动车道上去。因此很安心,连红绿灯都不用等。 但...

  • 低级错误

    今天出来了测试结果,从结果来看,有好几个重要维度竟然被遗漏,真的是无语了,我自己心理好难受。为啥这么低级的错误都会...

  • 低级错误

    不知道那会我忙什么去了, 一篇文章的录用返修通知我居然没及时看邮箱, 时间是2021.4.21要求修好返回,我今天...

网友评论

      本文标题:LabVIEW计算CRC16的低级错误

      本文链接:https://www.haomeiwen.com/subject/vmvshltx.html