Ok, ajmo u sitna crevca
Tebi neki senzor, recimo temperature, daje na ulazu ECU-a, razlicit napon u zavisnosti kolika je temperatura motora (u sustini menja se otpor senzora).
ECU tu analognu velicinu, digitalizuje, dobije nekakav broj recimo u opsegu od 0 do 65535 (verovatnije od 0-255 al nebitno). Moze da proveri dal je ona u nekim zadatim granicama ili je izasla totalno van opsega. Al nema sta da racuna nekakav checksum, kad je on sam upravo pretvorio analogni signal u digitalni, i upravo izracunao koliko je to.
Ti pricas o obradi podataka, samo prvo te podatke treba da dobijemo. I to da ih dobijemo ispravne. Racunaru uopste nije jednostavno da zna dal je podatak koji dobija ispravan ili nije. Nije problem kad neki totalno izleti van opsega, problem je kad "brljavi".
Recimo da imamo samo dva senzora, da bi uprostili.
Jedan daje podatke koji su u regularnom opsegu (recimo senzor polozaja bregaste), drugi je "odlepio" i daje neku bezveze vrednost (recimo senzor temperature).
Posto racunar ni kako ne moze da zna kolika je stvarno temperatura motora, ima par opcija:
1. Reset, pa da vidimo dal ce stanje da se popravi
1.1 stanje se popravilo, podaci o temperaturi su se vratili u normalu, teraj dalje
1.2 i dalje ne valja podatak o temperaturi
Sad ako je glupav, racunar moze stalno da vrti reset u krug, i ti ne mozes nikud.
Malo pametnija opcija ce uzeti da je temperatura neka unapred zadata (recimo normalna radna), prebaciti se u limp mod, to jest ograniciti snagu kako bi pokusao da izbegne pregrevanje, upaliti lampicu na instrument tabli, i dozvoliti ti da vozis.
Usput ce na osnovu podataka sa ostalih senzora, pokusati da prilagodi parametre rada sto bolje moze, znajuci da mu podatak o temperaturi nevalja.
I dalje nigde nikakvog checksuma.
E sad, ona gadnija varijanta, kad je neki senzor "malo" pokvaren. recimo taj za temperaturu, dobaci do 80 stepeni i nece dalje, iako se motor ugrejao na 98. Racunaru je jako tesko da prevazidje ovakve stvari. Primer sa senzorom temperature nije bas najbolji u ovom slucaju, al da kazemo da racunar moze na osnovu drugih parametara nekako da ustanovi da mu taj podatak ne valja. U tom slucaju, racunar radi otprilike sledece (naravno ne radi zaista to, ovo je teoretski primer).
Ok, temperatura motora po svim ostalim parametrima bi trebalo da je normalna, al meni stize da je 80 stepeni, to jest dobijam 10 volti sa senzora umesto da dobijam 12. Prekalibrisacu se pa cu smatrati da kad dobijem 10 volti motor je na 98 stepeni.
Cheksum se koristi kada jedan racunar salje podatke drugom racunaru. Nije bitno dal se nalaze u istoj ili razlicitoj kutiji, pa cak i da su na istom parcetu silicijuma.
Kad god imas komunikaciju, postoji mogucnost greske. Racunari rade nezavisno, svaki se zanima svojim poslovima, a onda dodje onaj drugi "kuc, kuc, imam nesto da ti kazem", ili "hej, ajd mi posalji sta se desava tamo oko radilice". Jedan racunar posalje pisamce drugom, al nemamo svi lep rukopis, pa nekada pisamce propusti ili promeni po neko slovo.
E tu checksum igra svoje.
Na osnovu nekog algoritma posiljalac racuna nekakav broj (nije prost zbir u pitanju) i salje ga na kraju paketa podataka.
Primalac po istom algoritmu sracuna taj broj i proveri dal se slaze sa onim sto je poslato.
ako se slaze, sve je u redu, ako ne: "ej nisam te dobro cuo, ajd posalji ponovo".
Checksum unutar jednog racunara, nema puno smisla. Ako sam racunar gresi, nikako ne moze da zna dal je pogresno izracunao cheksum ili su mu negde poblesaveli podaci.
Postoje varijante gde se i to radi, al to je na nivou maltene hardvera, i ne radi se u onome sto zovemo softver racunara.
Nego da se vratimo na pocetak. Cemu izmena softvera kad nista ne primetis?
Jedan od cestih bagova nastaje kad se prekoraci neka zamisljena vrednost. Recimo da u nekoj operaciji sabiras deset velicina, i njihov zibir bi regularno trebalo da bude na primer izmedju 500 i 5000. Medjutim, tri od njih iz nekog razloga "odlepe", ili jednostavno nisi predvideo da moze da se desi da ona bude tolika (dosao si u Srbiju i natocio gorivo

, potrefilo se da je taj dan izuzetno toplo, a vazdusni pritisak je nizak...), i zbir te tri poraste na 64000. Recimo da su sve ostale u zbiru 3000.
Eh, al ti si za zbir predvideo samo dva bajta (dovoljno za opseg do 5000, pa jos imas i bogato rezerve). Kad saberes 64000 + 3000 i to strpas u dva bajta, a ne proveris dal imas overflow rezultat ce biti 1465

Ti ces racunati dalje sa pogresnim podatkom, i naravno imaces pogresan krajnji rezultat.
Posto je sklop okolnosti da bi se tako nesto desilo redak (ko jos sipa gorivo na pumpi u Srbiji

), veoma mali broj ljudi ce natrcati na gresku. Jos ako je krajnja posledica relativno blaga, jos manji broj njih ce uopste shvatiti da neki problem postoji.
No pri nekoj simulaciji, ili jednostavnom redovnom doradom koda, neko je uocio da taj problem postoji, i ispravio ga.