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