labview中使用CAN总线中crc15算法

来源:互联网 发布:软件开发年终总结 编辑:程序博客网 时间:2024/05/14 07:53

CRC15校验,输入二进制字符串,返回字符串的15位校验位。
可用于CAN总线中CRC校验位的生成。CRC-15算法。


P(x) = x15+ x14+ x10+ x8+ x7+ x4+ x3+ x0


其实现代码如下:




// CRC Generation Unit - Linear Feedback Shift Register implementation

// (c) Kay Gorontzi, GHSi.de, distributed under the terms of LGPL// ==========================================================================char *MakeCRC(char *BitString)   {   static char Res[16];                                 // CRC Result   char CRC[15];   int  i;   char DoInvert;      for (i=0; i<15; ++i)  CRC[i] = 0;                    // Init before calculation      for (i=0; i<strlen(BitString); ++i)      {      DoInvert = ('1'==BitString[i]) ^ CRC[14];         // XOR required?      CRC[14] = CRC[13] ^ DoInvert;      CRC[13] = CRC[12];      CRC[12] = CRC[11];      CRC[11] = CRC[10];      CRC[10] = CRC[9] ^ DoInvert;      CRC[9] = CRC[8];      CRC[8] = CRC[7] ^ DoInvert;      CRC[7] = CRC[6] ^ DoInvert;      CRC[6] = CRC[5];      CRC[5] = CRC[4];      CRC[4] = CRC[3] ^ DoInvert;      CRC[3] = CRC[2] ^ DoInvert;      CRC[2] = CRC[1];      CRC[1] = CRC[0];      CRC[0] = DoInvert;      }         for (i=0; i<15; ++i)  Res[14-i] = CRC[i] ? '1' : '0'; // Convert binary to ASCII   Res[15] = 0;                                         // Set string terminator   return(Res);   }// A simple test driver:#include <stdio.h>int main()   {   char *Data, *Result;                                       // Declare two strings   Data = "1101000101000111";   Result = MakeCRC(Data);                                    // Calculate CRC      printf("CRC of [%s] is [%s] with P=[1100010110011001]\n", Data, Result);      return(0);   }

其中输入为二进制字符串。

	
				
		
原创粉丝点击