*/
zkrácená bez znaménka s;
znak bez znaménka c[2];
} tmp;
tmp. Pokud číslice přebývá,
přidá se“1”.paměť;
pro(i=0;i<len;i++) Součet použitím druhu zkrácených
dat bez znaménka. */
len Determine the number data points using "short' data type. (1) (6) se
sečtou jako dvoubytová celá čísla bez znaménka (krátká čísla bez znaménka).paměť, celočísel.
* len Délka dat, nichž počítá součet. i;
celé liché číslo;
kontrolní součet Inicializovat.součet (kontr.kontrolní součet bez znaménka; Hodnota
kontrolního součtu */
celočísel.součet >>16) 0xffff)) 0xffff)
/* Přidat přebývající číslice */
kontr.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
.paměti, která se
má sečíst. *i
p (unsigned short
fo r{i=a;i<Len;i++)
csum *p++j
/* Sum using unsigned short data type.
/*
* Funkce výpočtu součtu (pro 32-bitovou CPU)
*
* Vyrovnávací paměť parametrů Ukazatel vrchol
dat, nichž počítá součet.
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 kontr.P-355333 PŘÍRUČKA UŽIVATELE KOMUNIKAČNÍHO ROZHRANÍ TYP 559
6. */
lichá délka%2; Zkontrolujte, zda počet datových
bodů sudý nikoli.
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ů).c[0] *(( znak bez znaménka *)p);
kontrolní součet tmp.součet) 0xffff); bitová inverze */
}
programem vrátí vypočítaný výsledek.
* Vrácená hodnota Vypočítaný součet
*/
celočíselný kontrolní součet (znak bez znaménka
*vyrovn.součet 0xffff) +
((kontr.”
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.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í. */
len >>= Určete počet datových bodů použitím
„zkráceného“ typu dat. */
p (zkrácené bez znaménka vyrovn. */
if(odd)i When the data length odd *J
union tmp{ Pad with and add the unsigned short data.cIO] *((unsigned char *)p);
csura tmp. */
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. *!
unsigned short s;
unsigned char [2];
Jt-rp;
tm p.
• Pro součet dat vypočítá “Binárních dat.s;
}
jestliže((kontr. */
Celočísel. Nakonec výsledek bitech invertuje.součet 0xffff; Jestliže opět
přebývá číslice, přidejte */
návrat ((-kontr. Kontrolní součet stejný jako TCP/IP odvozen podle následujícího
algoritmu.
unsigned csumj Checksum value *f
in ;
in odd;
csum itia liz */
odd len'2; Check whether not the number ofdata points even.e[l] Of
tmp. 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.c[1] 0;
tmp