⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crcbuildtable.c

📁 这是我项目中使用的CRC算法的源码
💻 C
字号:
/****************************************************************************************
*文件名:crcBuildTable.c								COPYRIGHT(C) JINYANLAI
*														All Rights Reserved
*说明:根据crc.h中选择的CRC校验生成256项CRC表.
=========================================================================================
*版本历史
=========================================================================================
*版本	*时间		*作者	*更改标记		*更改说明
*----	*----		*----	*-------		*--------
* 0.1	*20061116	*敬恒	*无				*无

****************************************************************************************/
#include "includes.h"
#if !(USE_CRC_BITS >= 1)		//使用位计算的话,就不需要表了。
	#if USE_CRC_CCITT >= 1
	// CRC_CCITT=X16+X12+X5+1,最高位先移入CRC寄存器bit0,
	// CRC寄存器从bit0向bit15依次左移;CRC寄存器初始值为0。
	INT16U gu16CrcTable[256];
	void crcBuildTable(void)
	{
		INT8U	i=0,j;
		INT16U	lu16CrcReg;			//CRC寄存器
		
		do{
			lu16CrcReg = 0x0;
			
			for(j=0x80; j!=0; j>>=1)		//数据从高到低依次移入
	        {
				if(lu16CrcReg & 0x8000)	//CRC的bit15与输入的bit异或,为真则左移一位,
				{							//然后与0x1021异或,为假则直接异或。
					lu16CrcReg <<= 1;		//此处程序将if(bit15^bit)分解为
					lu16CrcReg ^= 0x1021;	//if(bit15)和if(bit)两条语句,
				}							//因为两次异或后crc_reg不变.
				else lu16CrcReg <<= 1;

				if(j & i) 					//取出输入字节的相应位,即if(bit) 
				{
					lu16CrcReg ^= 0x1021;
				}
	        }
			gu16CrcTable[i] = lu16CrcReg;
		}
		while(++i);		//i为8位无符号数,其0xff+1为0,这样对于8位MCU效率高一些,
	}					//不应使用i<256而将i定义为16位宽。

	#elif USE_CRC_32 >= 1
	//CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1,
	//最高位先移入CRC寄存器bit0,CRC从bit0向bit31依次左移。
	INT32U gu32CrcTable[256];
	void crcBuildTable(void)
	{
		INT8U	i = 0,j;
		INT32U	lu32CrcReg;
		
		do{
			crc_reg = 0x0;
			for(j = 0x80; j != 0; j >>= 1)
	        {
				if(lu32CrcReg & 0x80000000)
				{
					lu32CrcReg <<= 1;
					lu32CrcReg ^= 0x04C11DB7;
				}
				else lu32CrcReg <<= 1;

				if(j & i)
				{
					lu32CrcReg ^= 0x04C11DB7;
				}
	        }
			gu32CrcTable[i] = lu32CrcReg;
		}
		while(++i);
	}
	
	#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -