20230731_XiaoFuZi_emb/ZheDaXiaoFuZiBoot/Src/Usr/Tool/ZthyToolCheck.c
Rjh913828050 a8560d741e 类型:重构
内容:重新整理项目文件分类
人员:任家豪
2023-10-08 16:10:23 +08:00

58 lines
1.3 KiB
C

#include "ZthyToolCheck.h"
#include <stdio.h>
/* 8位异或校验代码 */
void ZthyToolCheckXor(unsigned char *Buf, unsigned int BufLen , unsigned char *Xor)
{
unsigned int i;
*Xor = 0;
for (i = 0; i < BufLen; i++) {
*Xor = (*Xor) ^ Buf[i];
}
}
/* 8位校验和 */
void ZthyToolCheckSum(unsigned char *Buf, unsigned int BufLen , unsigned char *Sum)
{
unsigned int i;
*Sum = 0;
for (i = 0; i < BufLen; i++) {
*Sum = (*Sum) + Buf[i];
}
}
/* CRC 0x31校验 */
void ZthyToolCheckCrc8_0x31(unsigned char *Buf, unsigned int BufLen , unsigned char *Crc)
{
unsigned char i = 0;
while (BufLen--) {
(*Crc) ^= *Buf++;
for (i = 0; i < 8; i++) {
if ((*Crc) & 0x01) {
(*Crc) = ((*Crc) >> 1) ^ 0x8c;
} else {
(*Crc) = ((*Crc) >> 1);
}
}
}
}
/* CRC16 modbus */
void ZthyToolCheckCrc8_0x8005(unsigned char *Buf, unsigned int BufLen , unsigned short *Crc)
{
unsigned short i, j, tmp, CRC16;
CRC16 = 0xffff;
for (i = 0; i < BufLen; i++) {
CRC16 ^= Buf[i];
for (j = 0; j < 8; j++) {
tmp = (unsigned short)(CRC16 & 0x0001);
CRC16 >>= 1;
if (tmp == 1) {
CRC16 ^= 0xA001; //异或多项式
}
}
}
*Crc = CRC16;
}