协议栈中使用crc校验函数
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校验值
思路以及步骤:
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校验值
#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[]只能接受一个字节的长度的数据。具体解决方法还未想明白,欢迎指导
协议栈中使用crc校验函数的更多相关文章
- delphi crc校验函数
function CalCRC16(AData: array of Byte; AStart, AEnd: Integer): string;const GENP=$8408; //多项式公式X1 ...
- CRC校验原理和verilog实现方法(一)
1.CRC简介 CRC全称循环冗余校验(Cyclic Redundancy Check, CRC),是通信领域数据传输技术中常用的检错方法,用于保证数据传输的可靠性.网上有关这方面的博客和资料很多,本 ...
- 基于Lwip协议栈中独立模式下回调函数的使用
一.使用Lwip协议独立模式开发 最近在STM32F4上边移植了Lwip,Lwip是一个小型开源的TCP/IP协议栈,有无操作系统的支持都可以运行.我当前只测试了TCP Server功能,然后对TCP ...
- 物联网平台设计心得:你所不知道的CRC校验
在物联网平台设计过程中,我的中间件一方面需要处理来自于硬件端的包,另一方面需要处理来自于用户端的包,用户端包括web端和手机端等等.所以编写一个统一的CRC认证是非常必须要. 那么,在设计开始,CRC ...
- CRC校验源码分析
这两天做项目,需要用到 CRC 校验.以前没搞过这东东,以为挺简单的.结果看看别人提供的汇编源程序,居然看不懂.花了两天时间研究了一下 CRC 校验,希望我写的这点东西能够帮助和我有同样困惑的朋友节省 ...
- 字符串CRC校验
字符串CRC校验 <pre name="code" class="python"><span style="font-family: ...
- 16位CRC校验_Delphi
unit Modbus_main; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, G ...
- CRC校验的实现
本例提供的是通过查表发来实现CRC校验. CRC余式表如下: unsigned int crctab[256] ={/*CRC余式表 */ 0x0000, 0x1021, 0x2042, 0x3063 ...
- CRC校验算法学习
原文:http://www.repairfaq.org/filipg/LINK/F_crc_v31.html 本文根据上述链接原文翻译而来,如有错误,忘广大网友互相帮忙纠正,谢谢! 1.前言: 1.0 ...
随机推荐
- 关于new Handler()与new Handler(Looper.getMainLooper())区别
如果你不带参数的实例化:Handler handler=new Handler();那么这个会默认用当前线程的Looper对象. 一般而言,如果你的Handler是要用来刷新UI的,那么就需要在主线程 ...
- from setuptools import setup ImportError: No module named setuptools【转】
转自:http://www.cnblogs.com/chinacloud/archive/2010/12/24/1915644.html from setuptools import setupImp ...
- mysql高可用架构 -> MHA配置VIP漂移-05
VIP漂移的两种方式 1)通过keepalived的方式,管理虚拟IP的漂移 2)通过MHA自带脚本方式,管理虚拟IP的漂移 MHA脚本方式 虚拟ip漂移的脚本下载地址 -> wget http ...
- poj1102
模拟 #include <iostream> #include <string> using namespace std; ][][] = { { ' ', '-', ' ', ...
- 使用免安装压缩包安装MySQL
OS:Windows 10家庭中文版 MySQL:mysql-5.7.20-winx64.zip 作者:Ben.Z 参考链接: Installing MySQL on Microsoft Window ...
- FM的推导原理--推荐系统
FM:解决稀疏数据下的特征组合问题 Factorization Machine(因子分解机) 美团技术团队的文章,觉得写得很好啊:https://tech.meituan.com/deep-unde ...
- 使用jsplumb的一些笔记
欢迎就是需要使用jsplumb跟正在使用jsplumb的一起讨论 欢迎私聊 1.关于jsplumb的connection的一些事件 ####connection拖动的事件 instance.bind( ...
- MySQL学习笔记:少用Null
在实际编程中,Null容易引起很多问题,例如在Java里NullPointerException猝不及防的空指针异常,因此需要过多的if判断,甚是麻烦. 在MySQL数据库中也要少用Null,尽量保持 ...
- Firefox地址栏样式设定
我希望把Firefox的界面调整为chrome-like,一个关键的地方就是地址栏:地址栏和tab之间的距离太大了,地址栏和页面本身之间的距离也太大. 设定方法是在FF中安装stylish插件,然后加 ...
- CF293B Distinct Paths题解
CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...
function CalCRC16(AData: array of Byte; AStart, AEnd: Integer): string;const GENP=$8408; //多项式公式X1 ...
1.CRC简介 CRC全称循环冗余校验(Cyclic Redundancy Check, CRC),是通信领域数据传输技术中常用的检错方法,用于保证数据传输的可靠性.网上有关这方面的博客和资料很多,本 ...
一.使用Lwip协议独立模式开发 最近在STM32F4上边移植了Lwip,Lwip是一个小型开源的TCP/IP协议栈,有无操作系统的支持都可以运行.我当前只测试了TCP Server功能,然后对TCP ...
在物联网平台设计过程中,我的中间件一方面需要处理来自于硬件端的包,另一方面需要处理来自于用户端的包,用户端包括web端和手机端等等.所以编写一个统一的CRC认证是非常必须要. 那么,在设计开始,CRC ...
这两天做项目,需要用到 CRC 校验.以前没搞过这东东,以为挺简单的.结果看看别人提供的汇编源程序,居然看不懂.花了两天时间研究了一下 CRC 校验,希望我写的这点东西能够帮助和我有同样困惑的朋友节省 ...
字符串CRC校验 <pre name="code" class="python"><span style="font-family: ...
unit Modbus_main; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, G ...
本例提供的是通过查表发来实现CRC校验. CRC余式表如下: unsigned int crctab[256] ={/*CRC余式表 */ 0x0000, 0x1021, 0x2042, 0x3063 ...
原文:http://www.repairfaq.org/filipg/LINK/F_crc_v31.html 本文根据上述链接原文翻译而来,如有错误,忘广大网友互相帮忙纠正,谢谢! 1.前言: 1.0 ...
如果你不带参数的实例化:Handler handler=new Handler();那么这个会默认用当前线程的Looper对象. 一般而言,如果你的Handler是要用来刷新UI的,那么就需要在主线程 ...
转自:http://www.cnblogs.com/chinacloud/archive/2010/12/24/1915644.html from setuptools import setupImp ...
VIP漂移的两种方式 1)通过keepalived的方式,管理虚拟IP的漂移 2)通过MHA自带脚本方式,管理虚拟IP的漂移 MHA脚本方式 虚拟ip漂移的脚本下载地址 -> wget http ...
模拟 #include <iostream> #include <string> using namespace std; ][][] = { { ' ', '-', ' ', ...
OS:Windows 10家庭中文版 MySQL:mysql-5.7.20-winx64.zip 作者:Ben.Z 参考链接: Installing MySQL on Microsoft Window ...
FM:解决稀疏数据下的特征组合问题 Factorization Machine(因子分解机) 美团技术团队的文章,觉得写得很好啊:https://tech.meituan.com/deep-unde ...
欢迎就是需要使用jsplumb跟正在使用jsplumb的一起讨论 欢迎私聊 1.关于jsplumb的connection的一些事件 ####connection拖动的事件 instance.bind( ...
在实际编程中,Null容易引起很多问题,例如在Java里NullPointerException猝不及防的空指针异常,因此需要过多的if判断,甚是麻烦. 在MySQL数据库中也要少用Null,尽量保持 ...
我希望把Firefox的界面调整为chrome-like,一个关键的地方就是地址栏:地址栏和tab之间的距离太大了,地址栏和页面本身之间的距离也太大. 设定方法是在FF中安装stylish插件,然后加 ...
CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...