fork download
  1. #include <stdio.h>
  2.  
  3. unsigned short int pec15Table[256];
  4. unsigned short int CRC15_POLY = 0x4599;
  5. void init_PEC15_Table();
  6. unsigned short int pec15 (unsigned char *data , int len);
  7. unsigned char Tx_data[8]={0};
  8. unsigned short int pec;
  9.  
  10.  
  11. int main(void)
  12. {
  13. int i;
  14. Tx_data[0] = 0xFF;
  15. Tx_data[1] = 0xFF;
  16. Tx_data[2] = 0xFF;
  17. Tx_data[3] = 0xFF;
  18. Tx_data[4] = 0xFF;
  19. Tx_data[5] = 0xFF;
  20.  
  21. init_PEC15_Table();
  22. for(i=0;i<256;i++)
  23. {
  24. /* printf("\t%d",pec15Table[i]);*/
  25. }
  26. pec= pec15(&Tx_data[0],6);
  27. printf("\t%d",pec);
  28. return 0;
  29. }
  30.  
  31.  
  32. void init_PEC15_Table()
  33. {
  34. int i,bit ;
  35. unsigned short int remainder;
  36. for ( i = 0; i < 256; i++)
  37. {
  38. remainder = i << 7;
  39.  
  40. for (bit = 8; bit > 0; --bit)
  41. {
  42. if (remainder & 0x4000)
  43. {
  44. remainder = ((remainder << 1));
  45. remainder = (remainder ^ CRC15_POLY);
  46. }
  47. else
  48. {
  49. remainder = ((remainder << 1));
  50. }
  51. }
  52.  
  53. pec15Table[i] = remainder&0xFFFF;
  54.  
  55. }
  56. }
  57. unsigned short int pec15 (unsigned char *data , int len)
  58. {
  59. unsigned int i, remainder,address;
  60. remainder = 16;//PEC seed
  61. for (i = 0; i < len; i++)
  62. {
  63. address = ((remainder >> 7) ^ data[i]) & 0xff;//calculate PEC table address
  64. remainder = (remainder << 8 ) ^ pec15Table[address];
  65. }
  66. return (remainder*2);//The CRC15 has a 0 in the LSB so the final value must be multiplied by 2
  67. }
  68.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
	26188