快速计算CRC校验(异或)的方法

本文探讨了嵌入式系统中BCC校验的重要性,提供了BCC校验在线计算工具链接,并通过C程序示例展示了如何计算校验值,确保数据传输的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在嵌入式的通信协议中,为了提高通信的鲁棒性,经常会对数据帧进行校验(其中一种常用方式是异或)。之前的做法是写 C程序进行校验,并输出结果。其实另一种方式是可以用BCC校验在线计算器进行校验值计算。

BCC校验在线计算方式:

http://www.ip33.com/bcc.html

C程序计算方式:

#include <stdio.h>
unsigned char check_sum;

int main(void)
{
//Matrix:	
	//        header+lenth+ cmd  + wgth + whtl + volth+ voltl+ year + mon  + day  + hour + min  + sec  + status+ SW_h + SW_l + hw_h + hw_l + TS_F;
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z12 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z12 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x02 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z13 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x02 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z13 Stop is %x\r\n",check_sum);
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z14 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z14 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x04 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z23 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x04 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z23 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x05 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z24 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x05 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z24 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z34 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z34 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x06 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z12 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x06 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z12 Stop is %x\r\n",check_sum); 
	
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x06 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z14 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x06 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z14 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x06 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z34 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x06 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z34 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0XCC ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("Calibrition Start is %x\r\n",check_sum);
	
} 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值