CheckSum校验

来源:互联网 发布:生产批号查询软件 编辑:程序博客网 时间:2024/05/21 15:05
[file head]:
/*
*****************************************Copyright (c)**************************************************

**
**--------------文件信息--------------------------------------------------------------------------------
** 文件名称: CheckSum.c
** 文件标识:
** 描 述: 校验和处理,用RealView 3.0+编译,必须使用ARM方式编译
**
**
**--------------修改记录--------------------------------------------------------------------------------
**
** 当前版本: 1.0
** 作 者:
** 完成日期: 2007年6月30日
** 修改内容:
**
** 取代版本:
** 作 者:
** 完成日期:
********************************************************************************************************
*/

#include "config.h"


const BYTE gv_smCRCHighTbl[256]={
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
... ...
[file tail]:
... ...
-----------------------------------------------------------
********************************************************************************************************
*/
DWORD CRC16CheckSum(BYTE *pbData, DWORD dwLen)
{

BYTE bTmpVal = 0;
BYTE bCRCH = 0xFF;
BYTE bCRCL = 0xFF;

DWORD dwLooper = 0;
DWORD dwRetc = EMCDCM_OK;

if((0 == dwLen) || (NULL == pbData))
{
dwRetc = EMCDCM_ERR;
}
else
{
for(dwLooper=dwLen; dwLooper>0; dwLooper--)
{
bTmpVal = bCRCH ^ (*pbData++);

bCRCH = bCRCL ^ gv_smCRCHighTbl[bTmpVal];
bCRCL = gv_smCRCLowTbl[bTmpVal];
}

*pbData++ = bCRCH;
*pbData = bCRCL;

dwRetc = EMCDCM_OK;

}

return dwRetc;

}


/*********************************************************************************************************
** End Of File
********************************************************************************************************/