rapide de calcul CRC ...

V

venz

Guest
Salut,

Caut pentru unele informaţii cu privire la calculul rapid CRC şi Verificarea folosind un AVR şi CodeVision C Compiler.
Anyody am o idee a lui sau link-uri ....

Greetz, venz.

 
Urmaţi acest link.Ea are un frumos Verilog / VHDL generator de cod pentru orice polinomiale CRC şi datele de orice lăţime.De asemenea, sprijină octet permite funcţia.
Last edited by thecat la 24 decembrie 2002 14:17; editat 1 dată în total

 
hi ..Eu am crc16 de rutină utilizate pe atmega163.Acest lucru este punerea în aplicare lentă, fără tabel de căutare, astfel încât să nu aveţi nevoie atât de mult RAM.
oricum cu 4MHz AVR acesta este mult mai rapid decât metoda rapida (lookuptable)
cu x51 de la 12MHz.i a putea a trimite tu sursă dacă este interesat ...

cu respect

anulaţi

 
Here we go ..destul de simplu; 0)
tu ai la spre know care polynom (poli) este folosit de la celălalt capăt# define 0xffff POLY

int nesemnat crc16 (unsigned char * data_p, lungime unsigned int)
(
nesemnat I char;
int unsigned d;
CRC unsigned int = 0xffff;
în cazul în care (lungime == 0)
return (~ CRC);
face
(
for (i = 0, D = (int nesemnate) 0xff & * data_p ; i <8; i , D>> = 1)
(
if ((CRC & 0x0001) ^ (D & 0x0001))
CRC = (CRC>> 1) ^ POLY;
altceva CRC>> = 1;
)
) În timp ce (- lungime);
CRC = ~ CRC;
d = CRC;
CRC = (CRC <<

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

| ((D>>

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

& 0xff);
return (CRC);
)

 
Salut

Acest cod este AC pe crc16:

/ * Tabel de valori CRC pentru octet pentru a mari * /
static const auchCRCHi unsigned char [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 de valori CRC pentru octet pentru a scăzut * /
statică auchCRCLo const unsigned char [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: mesaj pentru a calcula CRC la * /
/ * UsDataLen: cantitatea de bytes în mesaj * /

int nesemnat crc16 (unsigned char * puchMsg, usDataLen unsigned char)
(

nesemnat uchCRCHi char = 0xFF; / * octet ridicat de CRC initialized * /
uchCRCLo unsigned char = 0xFF; / * octet scăzut al CRC initialized * /
uIndex unsigned char; / * va indexa în CRC tabel de căutare * /

în timp ce (usDataLen -) / * trece printr-tampon de mesaj * /
(
uIndex = uchCRCHi ^ * puchMsg ; / * calcula CRC * /
uchCRCHi = uchCRCLo ^ auchCRCHi [uIndex];
uchCRCLo = auchCRCLo [uIndex];
)
return ((uchCRCHi <<8) | uchCRCLo);
)

 
Multumesc pentru info,

Are cineva un ebook despre calcule CRC?

Greetz, venz.

 
Uită-te acest lucru:
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

 
aici este cărţi soluţia krouse verifica metoda de CDC
Ne pare rau, dar ai nevoie de login pentru a vizualiza această ataşament

 

Welcome to EDABoard.com

Sponsor

Back
Top