我是靠谱客的博主 美好鸭子,这篇文章主要介绍协议栈中使用crc校验函数CRC校验介绍:循环冗余校验码,原理是多项式除法 ZigBee协议栈:能够使zigbee节点相互之间组网,数据传输,数据获取,数据显示 思路以及步骤: 4、将函数调用的时候会出现新的问题:只能显示低8位,无法显示高8位。原因是分配的存储空间不一样。cc是2个字节长度的数据,而dat[]只能接受一个字节的长度的数据。具体解决方法还未想明白,欢迎指导 ,现在分享给大家,希望可以做个参考。
CRC校验介绍:循环冗余校验码,原理是多项式除法
ZigBee协议栈:能够使zigbee节点相互之间组网,数据传输,数据获取,数据显示
思路以及步骤:
1、因为IAR的程序是用c写的,所以上网查找如何用C编写一个CRC校验函数
#include<stdio.h>int main(){int data[] = {0x01,0x03,0x00,0x00,0x00,0x04,0x02};//以一个7个字节的数组举例int i=0, j=0,cc = 0xffff;for(i=0; i<7;i++){ //这个长度是根据数组长度决定的cc = (cc^data[i]);for(j=0;j<8; j++){if((cc & 0x01) == 1){cc = ((cc >> 1) ^0xa001);}else{cc = (cc >> 1);}}}printf("%d",cc); //输出10进制CRC校验值printf("n");printf("%x",cc); //输出16进制的CRC校验值

2、在CodeBlock编译器例面运行成功以后,将代码完整的复制到IAR文件中


这时会看到,数据显示不正确,按照思路同样的代码,在C语言编译中输出的16进制是f288,那么在这里输出的应该是88 F2。(因为实际需求需要低位在前,高位在后)。
3、将int cc修改为int16 cc


可以看到输出结果没问题了。为什么会出现这种问题呢?int的数据范围不是-65536到65536吗?这是因为我们平常用C编译器的时候用的内存时计算机的内存,可以让很大的数据得以显示。但是在IAR中,我们用的CC2530的单片机的芯片,它的内存时有限的,我所用的单片机内存只有256kb,所以用int型显示时会出现问题
4、将函数调用的时候会出现新的问题:只能显示低8位,无法显示高8位。原因是分配的存储空间不一样。cc是2个字节长度的数据,而dat[]只能接受一个字节的长度的数据。具体解决方法还未想明白,欢迎指导
转载于:https://www.cnblogs.com/aqyl/p/6729495.html
最后
以上就是美好鸭子最近收集整理的关于协议栈中使用crc校验函数CRC校验介绍:循环冗余校验码,原理是多项式除法 ZigBee协议栈:能够使zigbee节点相互之间组网,数据传输,数据获取,数据显示 思路以及步骤: 4、将函数调用的时候会出现新的问题:只能显示低8位,无法显示高8位。原因是分配的存储空间不一样。cc是2个字节长度的数据,而dat[]只能接受一个字节的长度的数据。具体解决方法还未想明白,欢迎指导 的全部内容,更多相关协议栈中使用crc校验函数CRC校验介绍:循环冗余校验码,原理是多项式除法内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复