součet) 0xffff); bitová inverze */
}
programem vrátí vypočítaný výsledek. Kontrolní součet stejný jako TCP/IP odvozen podle následujícího
algoritmu. i;
celé liché číslo;
kontrolní součet Inicializovat. */
lichá délka%2; Zkontrolujte, zda počet datových
bodů sudý nikoli.paměti, která se
má sečíst.cIO] *((unsigned char *)p);
csura tmp.c[1] 0;
tmp. Pokud číslice přebývá,
přidá se“1”.součet >>16) 0xffff)) 0xffff)
/* Přidat přebývající číslice */
kontr.
unsigned csumj Checksum value *f
in ;
in odd;
csum itia liz */
odd len'2; Check whether not the number ofdata points even. */
kontrolní součet *p++;
jestliže(lichá){ Když datová délka lichá */
sjednocený tmp{ Vložka přidat zkráceným
datům bez znaménka.délka)
{
zkrácený bez znaménka *p; Ukazatel další
dvoubytové datové slovo vyrovn.s;
ifiicsum (csu* Oxffff) 4(C5um»16) Dxffff)) Qxffff)
f* Add the overflowed its */
csura csum Oxffff; the overflows again, add *t
return((-»csum) Oxffff); inversion *!
6-4
132/176
. *i
p (unsigned short
fo r{i=a;i<Len;i++)
csum *p++j
/* Sum using unsigned short data type. */
len Determine the number data points using "short' data type.
* len Délka dat, nichž počítá součet. */
if(odd)i When the data length odd *J
union tmp{ Pad with and add the unsigned short data.1 Syntax odezvy
Výpočet součtové hodnoty
Když parametr povelu nastaven “1,” výstup hodnot kontrolního součtu provádí pouze během
sériových komunikací.”
1byla výplň
T~
<0 <2> (3} {4) (5)
Jestliže datová délka vyrovnávací paměti lichá, použije výplň “0”, takže stane sudou.P-355333 PŘÍRUČKA UŽIVATELE KOMUNIKAČNÍHO ROZHRANÍ TYP 559
6.paměť;
pro(i=0;i<len;i++) Součet použitím druhu zkrácených
dat bez znaménka.paměť, celočísel. */
len >>= Určete počet datových bodů použitím
„zkráceného“ typu dat.
Vzorový program
Součtová hodnota určí následujícím vzorovým
určený vzorovým programem může porovnat se
datovým součtem úseku výstupu binárního zápatí.součet 0xffff) +
((kontr. */
Celočísel. (1) (6) se
sečtou jako dvoubytová celá čísla bez znaménka (krátká čísla bez znaménka).součet 0xffff; Jestliže opět
přebývá číslice, přidejte */
návrat ((-kontr. */
p (zkrácené bez znaménka vyrovn.součet kontr.
* Vrácená hodnota Vypočítaný součet
*/
celočíselný kontrolní součet (znak bez znaménka
*vyrovn.kontrolní součet bez znaménka; Hodnota
kontrolního součtu */
celočísel.
Vyrovnávací pam které počítá hodnota součtu
• Pro součet záhlaví vypočítá “datové délky příznak identifikátor” (pevně bytů). Součet
součtem záhlaví úseku výstupu binárního záhlaví a
VIZ ORIGINAL
Sum Calculation Function (for 32-bit CPU)
; Parameter buff
: len
: Returned value
Pointer the top the data which the sum calculated
Length the data which the sum calculated
Calculated sum
in cksum(unsigned char *buff, len)
{
unsigned short *p; Pointer the next tsre-byte data word tbs buffer that sumed.s;
}
jestliže((kontr.e[l] Of
tmp.
/*
* Funkce výpočtu součtu (pro 32-bitovou CPU)
*
* Vyrovnávací paměť parametrů Ukazatel vrchol
dat, nichž počítá součet. Nakonec výsledek bitech invertuje. */
zkrácená bez znaménka s;
znak bez znaménka c[2];
} tmp;
tmp.c[0] *(( znak bez znaménka *)p);
kontrolní součet tmp. *!
unsigned short s;
unsigned char [2];
Jt-rp;
tm p.součet (kontr.
• Pro součet dat vypočítá “Binárních dat