协议栈中使用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 ...
随机推荐
- Lucene7.1.0版本的索引创建与查询以及维护,包括新版本的一些新特性探索!
一 吐槽 lucene版本更新实在太快了,往往旧版本都还没学会,新的就出来,而且每个版本改动都特别大,尤其是4.7,6,6,7.1.......ε=(´ο`*)))唉,但不可否认,新版本确实要比旧版本 ...
- STL容器基本功能与分类
STL有7中容器. 分别为: vector 向量 <vector>(头文件) 随机访问容器.顺序容器 deque 双端队列 <deque> 随机访问容器.顺序容器 list ...
- Wood Cut
Given n pieces of wood with length L[i] (integer array). Cut them into small pieces to guarantee you ...
- linux之发送邮件--sendmail服务配置
新手入门也不知道什么日志分析服务好,鸟哥说logwatch,那我就从logwatch开始吧! logwatch用到了emai发邮件,先从配置邮件发送sendmail开始: 安装sendmail服务,我 ...
- session的本质及如何实现共享?
为什么有session? 首先大家知道,http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你. 那么,在一些场合,确实需要服务器记住当前用户怎么办 ...
- Nginx 虚拟主机 VirtualHost 配置
Nginx 是一个轻量级高性能的 Web 服务器, 并发处理能力强, 对资源消耗小, 无论是静态服务器还是小网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高. 我在& ...
- JAVA类课后练习
1.Pg168--2 package com.hanqi; import java.util.Scanner; public class Rectangle { Rectangle() { //完成初 ...
- linux 101 hacks 4stat diff ac
stat 命令 stat 命令那个可以用来查看文件或者文件系统的状态和属性.显示一个文件或目录的属性 $ stat /etc/my.cnf File: `/etc/my.cnf' Size: Bloc ...
- Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决
有人会说不建议Wpf中使用Winform控件,有人会说建议使用Winform控件在Wpf下的替代方案,然而在实际工作中由于项目的特殊需求,考虑到时间.成本等因素,往往难免会碰到在WPF中使用Winfr ...
- windows svn post-commit 报错解决 error resolving case
在svn仓库目录下有个hooks目录,下面建一个 post-commit.cmd 文件,有代码提交到仓库,自动checkout到指定目录. @echo onSET REPOS=%1SET USER ...
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 ...
一 吐槽 lucene版本更新实在太快了,往往旧版本都还没学会,新的就出来,而且每个版本改动都特别大,尤其是4.7,6,6,7.1.......ε=(´ο`*)))唉,但不可否认,新版本确实要比旧版本 ...
STL有7中容器. 分别为: vector 向量 <vector>(头文件) 随机访问容器.顺序容器 deque 双端队列 <deque> 随机访问容器.顺序容器 list ...
Given n pieces of wood with length L[i] (integer array). Cut them into small pieces to guarantee you ...
新手入门也不知道什么日志分析服务好,鸟哥说logwatch,那我就从logwatch开始吧! logwatch用到了emai发邮件,先从配置邮件发送sendmail开始: 安装sendmail服务,我 ...
为什么有session? 首先大家知道,http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你. 那么,在一些场合,确实需要服务器记住当前用户怎么办 ...
Nginx 是一个轻量级高性能的 Web 服务器, 并发处理能力强, 对资源消耗小, 无论是静态服务器还是小网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高. 我在& ...
1.Pg168--2 package com.hanqi; import java.util.Scanner; public class Rectangle { Rectangle() { //完成初 ...
stat 命令 stat 命令那个可以用来查看文件或者文件系统的状态和属性.显示一个文件或目录的属性 $ stat /etc/my.cnf File: `/etc/my.cnf' Size: Bloc ...
有人会说不建议Wpf中使用Winform控件,有人会说建议使用Winform控件在Wpf下的替代方案,然而在实际工作中由于项目的特殊需求,考虑到时间.成本等因素,往往难免会碰到在WPF中使用Winfr ...
在svn仓库目录下有个hooks目录,下面建一个 post-commit.cmd 文件,有代码提交到仓库,自动checkout到指定目录. @echo onSET REPOS=%1SET USER ...