CRC8

Martin Sveda sejda
Středa Březen 17 14:25:13 CET 2004


    Zdravim,

> Pokud se pocita CRC8 a alespon jeden bajt je nenulovy, muze nastat 
> situace (kombinace) ze vyjde nula?

To sice ted nevim, ale kdysi jsem napsal jeden
programek, ktery pocita CRC16. Treba vam to pomuze.
Kdyz jsem to psal tak jsem cerpal z navodu, ktery
se tusim jmenuje "A painless guide to crc algorithms"
nebo tak nejak - najdete v googlu.

S pozdravem

P.S. Doufam, ze ta priloha konferenci projde...

-- 
                                         Martin Sveda
					 
		      email:        sejda@kn.vutbr.cz
		             martin.sveda@kn.vutbr.cz
		      www:    www.kn.vutbr.cz/~sveda3
-------------- next part --------------
/*                                                                *
 * File:         crcsum.c                          2002-05-20     *
 *                                                                *
 * Description:  The program reads data from stdin and writes     *
 *               it to the stdout. After EOF is read, the CRC     *
 *               checksum is written to the stdout                *
 *                                                                *
 * Author:       Martin Sveda                                     *
 *               martin.sveda@kn.vutbr.cz                         *
 *                                                                *
 * Project:      Communication Subsystems of Robots               *
 *                                                                *
 *               Compiled with gcc (2.91.66) and tested under     *
 *               Linux RH 6.2                                     *
 *               gcc -Wall -ansi -pedantic crcsum.c -o crcsum     *
 *                                                                *
 * Usage :       cat file | crcsum                                *
 *                                                                */

#include <stdio.h>

unsigned int crc16_tbl[255] = {0};      /* CRC16 look-up table */


void create_crc16_table(void)
{
                                 /* basic CRC table */
   unsigned int basic_tbl[8] = { 0xA001, 0xF001, 0xD801, 0xCC01,
                                 0xC601, 0xC301, 0xC181, 0xC0C1 };
   unsigned int ans;
   int i, j;


   for (i = 0; i <=255; i++)
   {
      ans = 0;
      for (j = 7; j >= 0; j--)
      {
         if ((i >> (7-j)) & 0x01)
         {
            ans = ans ^ basic_tbl[j];
         }
      }
      crc16_tbl[i] = ans;
   }
}


int main(void)
{
   int c, i;
   unsigned int crc16 = 0;              /* calculated checksum */ 
   
   create_crc16_table();                /* create the crc16 look-up table */
   
   while ((c = getchar()) != EOF)
   {
      putchar(c);
      i =  c ^ (crc16 & 0x00FF);
      crc16 = crc16_tbl[i] ^ ((crc16 & 0xFF00) >> 8);
   }

   printf("CRC checksum: %u\n",crc16);
   return 0;
}

/* end of file crcsum.c */



Další informace o konferenci Hw-list