0度虚实 发表于 2015-1-30 13:08:40

shaoziyang 发表于 2015-1-30 09:23
就这么简单啊,代码自己很容易实现吧。没有什么困难的。

先判断第一个字节是不是冒号,然后判断第2/3字 ...

hex记录结构我了解,就是最后这个校验码算来算去都不对,不知道怎么算的,安你的意思,代码是不是这样。
charCRC8(char *pData, uint16_t len)
{
uint16_t i;
uint32_t result = 0;
for(i = 0; i < len; i++)
{
    result += pData;
}
result = result % 256;

return (char)result;
}

shaoziyang 发表于 2015-1-30 13:14:36

result 改用 uint8_t就可以了。

0度虚实 发表于 2015-1-30 13:21:18

技术部-徐亚菲 发表于 2015-1-30 11:21
怎么和modbus通信协议似的!

对,协议和modbus协议数据项都一样的,一个校验码8位,一个16位的,校验方式也不一样

0度虚实 发表于 2015-1-30 13:24:11

shaoziyang 发表于 2015-1-30 13:14
result 改用 uint8_t就可以了。

:1011000071079907E8071008D206FA0671079907D0
计算结果还是和原先一样,0x30而不是D0.
校验数据项是1011000071079907E8071008D206FA0671079907

shaoziyang 发表于 2015-1-30 13:33:09

0度虚实 发表于 2015-1-30 13:24
:1011000071079907E8071008D206FA0671079907D0
计算结果还是和原先一样,0x30而不是D0.
校验数据项是1011 ...

计算结果是补码啊。其实直接把校验也加上,如果结果是0,说明就是正确的。

0x30+0xD0=256=0

QianFan 发表于 2015-1-30 13:43:35

0度虚实 发表于 2015-1-30 09:05
就这么简单吗,能给个算法吗?

这个算法怎么感觉是checkSum啊。
st芯片下载的校验使用的算法是checkSum,不是CRC吧

0度虚实 发表于 2015-1-30 13:45:08

shaoziyang 发表于 2015-1-30 13:33
计算结果是补码啊。其实直接把校验也加上,如果结果是0,说明就是正确的。

0x30+0xD0=256=0 ...

太感谢,困扰我很久了.关于补码问题,没涉及到负数,结果为什么会是补码

shaoziyang 发表于 2015-1-30 14:07:27

0度虚实 发表于 2015-1-30 13:45
太感谢,困扰我很久了.关于补码问题,没涉及到负数,结果为什么会是补码 ...

补码这是HEX规范定义的。你想啊,最后所有数加起来,只判断是不是0,效率就比较高,也简单一些。

lkl0305 发表于 2015-1-30 14:11:06

累加:):)

0度虚实 发表于 2015-1-30 14:29:37

shaoziyang 发表于 2015-1-30 14:07
补码这是HEX规范定义的。你想啊,最后所有数加起来,只判断是不是0,效率就比较高,也简单一些。 ...

嗯嗯,简单有效,感谢。:handshake
页: 1 [2]
查看完整版本: Hex文件格式CRC校验