Snelle CRC berekening ...

V

Venz

Guest
Hoi,

Ik ben op zoek naar wat info over snelle CRC berekening en gecontroleerd met behulp van een AVR en Codevision C Compiler.
Anyody kreeg een idee's of links ....

Greetz, Venz.

 
Volg deze link.Het heeft een mooie Verilog / VHDL-code generator voor elke CRC polynoom en de gegevens breedte.Het ondersteunt ook byte kunnen functioneren.
Last edited by thecat op 24 december 2002 14:17, edited in totaal 1 keer

 
hi ..Ik heb CRC16 routine gebruikt op ATmega163.dit is de trage uitvoering zonder opzoektabel dus je hoeft niet zo veel ram.
toch met 4MHz avr het is veel sneller dan snelle methode (lookuptable)
met x51 op 12MHz.Ik kan sturen u als bron geïnteresseerd ...

groeten

annuleren

 
here we go ..heel simpel; 0)
je moet weten welke Polynom (POLY) wordt gebruikt op het andere uiteinde# define POLY 0xffff

unsigned int CRC16 (unsigned char * data_p, unsigned int length)
(
unsigned char i;
unsigned int d;
unsigned int CRC = 0xffff;
if (length == 0)
return (~ CRC);
doen
(
for (i = 0, d = (unsigned int) 0xff & * data_p ; i <8; i , d>> = 1)
(
if ((CRC & 0x0001) ^ (D & 0x0001))
CRC = (CRC>> 1) ^ POLY;
anders CRC>> = 1;
)
) While (- lengte);
CRC = ~ crc;
d = crc;
CRC = (crc <<

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Koel" border="0" />

| ((D>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Koel" border="0" />

& 0xff);
return (CRC);
)

 
hoi

dit is AC code op CRC16:

/ * Tabel van de CRC-waarden voor hoge byte * /
static const unsigned char auchCRCHi [256] = (
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40
);/ * Tabel van de CRC-waarden voor de lage byte volgorde * /
static const unsigned char auchCRCLo [256] = (
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
0x04, 0xCC, 0x0C, 0x0D, 0xcd, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1a, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xd0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xfd, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3a,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
0x2E, 0x2f, 0xEF, 0x2D, 0xED, 0xEC, 0x2c, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6e, 0xAE, 0xAA, 0x6A, 0x6b, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
0x7B, 0x7a, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9e, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4b, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
0x40
);/ * PuchMsg: bericht aan CRC berekenen op * /
/ * UsDataLen: hoeveelheid bytes in message * /

unsigned int CRC16 (unsigned char * puchMsg, unsigned char usDataLen)
(

unsigned char uchCRCHi = 0xFF; / * hoge byte van CRC geïnitialiseerd * /
unsigned char uchCRCLo = 0xFF; / * lage byte van CRC geïnitialiseerd * /
unsigned char uIndex; / * zullen index in CRC opzoektabel * /

while (usDataLen -) / * passeren bericht buffer * /
(
uIndex = uchCRCHi ^ * puchMsg ; / * berekenen van de CRC * /
uchCRCHi = uchCRCLo ^ auchCRCHi [uIndex];
uchCRCLo = auchCRCLo [uIndex];
)
return ((uchCRCHi <<8) | uchCRCLo);
)

 
Bedankt voor de info,

iedereen kreeg een ebook over crc berekeningen?

Greetz, Venz.

 
Kijk dit:
h ** p: / / w * w.ross.net / crc /
h ** p: / / w * w.ross.net / crc / links.html
h ** p: / / w * w.geocities.com/SiliconValley/Pines/6639/docs/crc.html
h ** p: / / w * w.efg2.com/Lab/Mathematics/CRC.htm
h ** p: / / w * w2.rad.com/networks/1994/err_con/crc.htm

 
Hier is de oplossing krouse boeken controleren de CRC-methode
Sorry, maar je moet inloggen om deze gehechtheid

 

Welcome to EDABoard.com

Sponsor

Back
Top