为确保消息数据的完整性,除了验证消息CRC之外,建议实现检查串行端口(UART)成帧错误的代码。如果接收消息中的CRC与接收设备计算的CRC不匹配,则应忽略该消息。下面的C语言代码片段显示了如何使用逐位移位和异或运算来计算Modbus消息CRC。使用消息帧中的每个字节计算CRC,除了包含CRC本身的最后两个字节。
【例子】通过CRC-16循环冗余校验的方式实现数据传输与控制,例如控制LED灯、蜂鸣器、发送数据到上位机。由于是数据传输与控制,需要定制一个结构体、共用体方便数据识别,同时增强可读性。从数据帧格式定义中可以定义
//CRC16校验在通讯中应用广泛,这里不对其理论进行讨论,只对常见的3种//实现方法进行测试。方法1选用了一种常见的查表方法,类似的还有512字//节、256字等查找表的,至于查找表的生成,这里也略过。// --------------
CRC校验又称为循环冗余校验,是数据通讯中常用的一种校验算法。它可以有效的判别出数据在传输过程中是否发生了错误,从而保障了传输的数据可靠性。CRC校验有多种方式,如:CRC8、CRC16、CRC32等等。在实际使用中,我