C CRC

Jiří Krul jKrul
Středa Březen 17 14:30:06 CET 2004


> Pekne posana problematika, ale pro me pole (asi 20 byte) bude jedno bytove
> CRC uplne stacit.

No ono zalezi na uhlu pohledu
                 data         control check
data     01 05 08 04   18
data     01 04 08 05   18

jak vidite data se lisi o dva bity a kontroln? soucet je stejny.
Teorie informaci rika, ze provdepodobnost zmeny 0 na 1 je u symetrickeho
komunikacniho kanalu stejna jako zmena 1 na 0 a pravdepodobnost, ze i bitu
prijateho
n bitoveho slova je chybnych lze vyjadrit vyrazem:
P(i)=p^i (1-p)^n-i

Osobne bych napriklad pri komunikaci po RS-485 radeji pouzil CRC16.


>Je mi jasne, ze pretypovani na (char) prekladac jen uklidnilo, ale
> spravne to neni.

Otazka je co je vlastne v C / C++ spravne. Struktura je vlastne uzivatelsky
datovy typ, ktery ma velikost n bytu
a pokud ukazatel na strukturu pretypujeme na ukazalel na char, kterym
nasledne "projedeme" vsech n bytu je to z hlediska
jazyka C  pripustne. Otazkou je jak takova konstrukce vypada z hlediska
"cistoty" programovani.
Protoze nebylo receno proc se vlastne kontolni soucet pocita predpokladam,
ze data ve strukture jsou posilana po nejakem konumikacnim
kanalu, rekneme RS485, od odesilatele k prijemci.

Zde nastava zasadni problem, ktery sice nemusi byt fatalni v pripade vypoctu
kontolniho souctu, ale je fatalni v pripade pouziti CRC norma ANSI C
respektive ANSI C++
definuje u jednotlivych datovych typu pouze minilani parametry, napriklad
float musi mit minimalni velikost 32 bitu a double 48 bitu, v praxi ma
double vetsinou 64bitu, a muze se lisit nejenom prekladac od prekladace, ale
i mezi  verzemi tehoz prekladace.
V cem je problem je jasne.

Pokud se tedy nepletu a cele to je o komunikaci mezi odesilatelem a
prijemcem pak by se mel. vyhradne komunikovat pouze bloky bytu, neco jako
pakety ( hlavicka-data-kontrolni soucet)
u kterych se po jejich prijmu provede overeni autenticnosti a nasledne se
naplni do nejeke struktury.

How



----- Original Message -----
From: "Ing. Pavel Poucha" <papouch@papouch.com>
To: <hw-news@list.gin.cz>
Sent: Sunday, June 16, 2002 5:17 PM
Subject: Re: RE: C CRC


> Pekne posana problematika, ale pro me pole (asi 20 byte) bude jedno bytove
> CRC uplne stacit.
>
> Jak byste to ale v Cecku napsal spravne ? Na tu strukturu se vsude divam
> jako na strukturu a tak s ni pracuji. At vsak pouziji libovolny z Vami
> popsanych algoritmu, divam se na pri vypoctu CRC na strukturu jako na pole
> bytu. Je mi jasne, ze pretypovani na (char) prekladac jen uklidnilo, ale
> spravne to neni.
>
> S pozdravem
> ing. Pavel Poucha
>
> M?te-li chu?, nav?tivte na?e str?nky http://www.papouch.com
>
>
> ----- Original Message -----
> From: "Ji?? Krul" <jKrul@seznam.cz>
> To: "HWNews" <hw-news@list.gin.cz>
> Sent: Friday, June 14, 2002 9:19 PM
> Subject: RE:hw-news@list.gin.cz
>
>
> > Mate stesti a docela hodny prekladac, spravne by to melo skoncit chybou
> pri
> > prekladu, protoze &Zaznam je ukazatel na datovy typ Zaznam coz je
> struktura
> > a pretypovani na ukazaterl char  neni implicitne mozne.
> >
> > Jinak pokud nepocitate CRC - (Cimrman's Redudancy Code) kdyz psal
Cimrman
> > zdrojove kody v restauraci "U Sirotku", stavalo se mu tesne pred
zaviraci
> > hodinou, ze videl nektere radky dvojite nebo i trojite. Tyto casti kodu
> > oznacoval prave touto zkratkou, ale Cyclic-Redundency-Check presneji
CRC8
> > tak to se resi jako polynom
> >
> > CRC== X^8 + X^5 + X^4 + 1
> >
> > Trocha teorie nikoho nezabije
> >
> >   CRC je jen jedna zvlastni podmnozina linearnich kodu, ktera ma tu
> > vlastnost, ze kazda rotace kodove znacky (znacka = data + zabezpeceni)
je
> > taky kodovou znackou. Kdyz si tedy vezmete soubor i s crc na konci a
cely
> > jej
> > zrotujete (libovolne krat), tak to bude vzdrycky davat smysl (jeden ze
> > zpusobu jak obelstit crc).
> >       Zakladem crc je vzdy bazovy polynom (treba x+1 - pro nenarocne).
> > Vstupni data jsou chapana take jako polynom: treba 10010 je 1+x^3 (zleva
> od
> > nejnizzsiho stupne). Vynasobenim techto dvou polynomu (s uvazenim, ze
> > pracuji
> > pouze s binarnimi cisly >> 2x=0 treba) a naslednym prevedenim zpet do
> > binarni
> > podoby se dostane blok dat i ze zabezpecenim (tedy data + crc).
> >
> >       Bazovy polynom samozrejme nejde zvolit jen tak libovolne, nebot
musi
> > splnovat urcite vlastnosti (jeho stupen je roven poctu bitu
zabezpeceni -
> > pro
> > 32CRC je tedy potreba polynom 32teho stupne). V literature se to jenom
> hemzi
> > ruznymy polynomy (velmes 64, 32 nebo 16), pricemz ty se pouze lysi tim,
> > kolik
> > n nasobnych chyb je schopen 100% detekovat.
> >
> >       Tento popsany algoritmus ma tu nevyhodu, ze neni systematycky -
> tedy,
> > ze
> > vstupni data jsou navic zkodovana (nezustanou v puvodnim tvaru). Pokud
by
> > nekdo potreboval systematicky kod, tka mu poradim, ze se to dela naopak
> > delenim (specialnim samozrejme).
> >
> >       CRC se dopotucuje pouzivat na kratsi bloky dat (tak 4k)....
> >
> >
> > Na netu je zada zdrojaku pro CRC8 CRC16 a CRC32 pro kdejaky procesor,
> > optimalizovane na rychlost, velikost atd.
> >
> >
> >
> >
> > S pzd J.Krul
> >
> >
> >
>
>
> ---
> Odchoz? zpr?va neobsahuje viry.
> Zkontrolov?no antivirov?m syst?mem AVG (http://www.grisoft.cz).
> Verze: 6.0.370 / Virov? b?ze: 205 - datum vyd?n?: 5.6.2002
>
>
>





Další informace o konferenci Hw-list