串口中CRC这是怎么回事
用来做奇偶校验的,在串口通讯中通常使用8N1,代表8位数据 没有(none)校验,1个停止位。
当这个N选择奇校验或者偶校验的时候,就需要这个CRC了,将前面8位数据相加,看这个和数是奇数还是偶数来确认CRC位的值,达到了校验前面接收的8个字节是否正确的目的,如果正确接受,不正确则放弃或者重发。
用来校验的,
看下面链接,希望对你有用
http://blog.sina.com.cn/s/blog_67b729700100no1t.html
calcCRC函数是对接收数据进行CRC校检。
addCRC函数是对发送数据添加CRC校检。
CRC校检是根据一整个帧的数据的每一个位进行CRC计算得到一个校检值。
这样双方通讯的时候接收端根据数据计算CRC校检值和发送过来的CRC进行比较,如果不一致则认为数据包错误。
我记得ModBus文档里面有一个简单的CRC算法,并给出了例程,可以参考一下。
CRC即循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。
一般是附加值报文的末尾,用于为整个报文或报文的一部分提供检测值。
简单说来就是,有一段信息,在发送端传递这个信息,并传递一个CRC值(根据发送数据和计算规则计算出的),接收端接收信息和CRC值,接收端把接收到的信息按同样规则计算一个CRC值,如果和传送端发过来的CRC值一致,则认为接收到的数据是完整的。
不过头文件中addCRC感觉有点问题啊,居然没有参数?用全局变量传递数据?这个可能不是太好。
CRC的方式也有很多,参看下http://blog.51cto.com/winda/1063951,了解下。
这个calcCRC函数接收一个字符串指针,和一个表示长度的8位数据,会输出一个数
把输出的数与接收到的用于校验的数比较
如果不相等,就跳过
如果相等,进入下一步操作,数据解析