中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 嵌入系统 >>电子行业新闻正文

用C语言实现CRC校验计算 

时间:2006/11/27 11:51:00  作者:  来源:ic72  浏览人数:1603
 
 

      摘  要:简述CRC算法原理,给出一种新颖快速的查表计算方法,并给出用C语言编写的算法源程序。

      关键词:CRC、多项式、查表法

      在编写数据传输程序时,数据容错是一个非常重要的问题。循环冗余位校验(Cyclicl Redundncy Check英文简称CRC)是目前运用非常广泛的一种数据容错方法,在数据传输,数据压缩等领域运用极其广泛。CRC的实现分为硬件和软件两种方法,其中软件实现的关键在于计算速度。如果单纯模拟硬件实现方法,则计算速度较慢。笔者在编制一个数据通讯软件中,运用了一种新颖的查表法计算CRC,速度很快,效果极佳。

  首先介绍其原理,如果每次参与CRC计算的信息为一个字节,该信息字节加到16位的累加器中去时,只有累加器的高8位或低8位与信息字节相互作用(异或),相互作用(异或)的结果记为组合值,那么累加器中的新值等于组合值加上(按模2异或)累加器中未改变的那一半即为新的CRC值。

  组合值只有256种可能,因此可利用硬件模拟算法先算好它们的CRC值预先填入一张表中,该表的每一单元对应相对值的CRC。这样就可以通过查表法来计算CRC值,以便大大提高CRC运算的速度。下面给出用C语言编制的计算程序。

      首先将CRC生成多项式及CRC值表定义为一个头文件CRC.H:

      #define CRC_CCITT 0x1021  //CCITT多项式

      #define REV_CCITT 0x8408  //反转CCITT多项式

      #define CRC16 0x8005      //CRC16多项式

      #define REV_CRC16 0x

      001  //反转CRC16多项式

      unsigned short crc_tble[256]; //CRC值表

      注:16位CCITT多项式(X16 +X12 +X5 +1)和16位CRC16多项式(X16 +X15 +X2+1)为两种最常用的CRC多项式。反转多项式是指在数据通讯时,信息字节先传送或接收低位字节,如重新排位影响CRC计算速度,故设反转多项式。

      造表和查表法CRC计算函数。

      #include "crc.h"

      void mk_crctble(unsigned short genpoly)

      unsigned short crc_tble[256];

      unsigned short

      ccnum=0;

      unsigned short i,j,k;

      for(i=0,k=0;i<256;i++,k++)   

      i<<=8;

      for(j=8;j>0;j--)     

      if((i^ccnum)&0x8000)

      ccnum=(

      ccnum<<=1)^genpoly;

      else 

      ccnum<<=1;

      i<<=1;        

      crc_tble[k]=

      ccnum;   

      void crc_upd

      te(unsigned short d

      t

      ,unsigned short

      ccnum)

      ccnum=(

      ccnum<<=8)^crc_tble[(

      ccnum>>8)^d

      t]; 

      注:genpoly为CRC多项式,

      ccnum为累加器值(即为新的CRC值),d

      t

      为参与CRC计算的信息。

 

 
【相关文章】
·用C语言实现CRC校验计算 
·采用ROM监控器的调试技巧分析
·基于MSP430F449的数字频率计设计 
·基于AT90S8515的串行通信及其应用 
·基于ARM的车载GPS智能导航系统
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9