[ developer94 @ 20.05.2012. 11:13 ] @
Da li se nekome desavalo da varijable same od sebe pomere svoju vrednost za +/- 20 ili makar za 1 u toku rada?
Otkucao sam neko parce koda koje je skoro u potpunosti bazirano na globalnim varijablama i koje ima nicim izazvane tripove i skokove.
Kod sam preorao vise puta, i odradio debug temeljno, i prilicno sam siguran da radi, posto veci deo ponovljenih izvrsavanja funkcionise bez problema. Nazalost ne mogu da dozvolim da i jedan od prolaza utripuje, te mi ovo pravi problem :/

Da li globalne varijable zaista mogu uticati toliko?
[ Odin D. @ 20.05.2012. 11:41 ] @
Evo sad cu ja da bacim pasulj....
[ goran_68 @ 20.05.2012. 13:38 ] @
Same od sebe, nikako. Daj taj kod da vidimo.
[ ZAS011 @ 20.05.2012. 15:59 ] @
Sace tatko da uzme tastaturu u svoje ruke :) pa da resi "nestabilne" varijable.
[ bogdan.kecman @ 20.05.2012. 16:36 ] @
Citat:
developer94: Da li se nekome desavalo da varijable same od sebe pomere svoju vrednost za +/- 20 ili makar za 1 u toku rada?
Otkucao sam neko parce koda koje je skoro u potpunosti bazirano na globalnim varijablama


1. da li si siguran 100% da te globalne varijable ne menjas iz interapta i slicno, ako nisi 100% siguran, postavi ih na volatile za svaki slucaj pa vidi da li i dalje imas problem

2. da li koristis pointere? da li si siguran da ti nije neki pobegao?

3. da li sprava radi u industriskim uslovima? nemas neke smetnje koje lude oko sprave (neke motore i slicno) ?
[ developer94 @ 21.05.2012. 08:33 ] @
Tatko je mesto tastature uzeo lemilicu, posto je to njegov deo ;p
Ja sam u medjuvremenu na istoj tastaturi pobacao zastite kojima nije smetalo mnogo ako jedan od uslova pobegne za +/-2~3 te sve radi dosta stabilnije.
Bas cu da probam danas ponovo da vidim da li su smetnje unosile neoptokaplerisani izlazi i ulazi na cipu - juce smo utvrdili da smo propustili cini mi se 2 komada.
Ako ne uspe ni ovako, uzecu da napakujem bar deo koda oko kog se sve lomi u jedan fajl, pa cu da okacim.
[ bogdan.kecman @ 21.05.2012. 14:03 ] @
uopste ne mora da znaci da je problem u delu koda koji se time bavi, ako ti varijable menjaju vrednost u 90% slucajeva imas niz kome si omasio index ili neki pointer koji ti je pobegao ... kompajleri to ne proveravaju tako da ako imas npr

Code:


char niz[20];
char varijabla1;
char varijabla2;

...

niz[20] = 10;



ti si ovde efektivno promenio vrednost variable1 (mada ne mora da znaci, mozda si promenio bilo sta bilo gde, zavisi kako kompajler napakuje sve to, ali u svakom slucaju nisi uradio ono sto si hteo)
[ developer94 @ 21.05.2012. 20:44 ] @
Nit niza nit pointera nema, sve je svedeno na goli minimum po tom pitanju, zato i imam gomilu globalnih varijabli... Al u glavnom sam resio problem tako sto sam zatvorio opseg provere vrednosti (ionako je medjusobna razlika po 5-10k) gore dole za 20tak.
Zasad funkcionise ok, bar ovaj deo koji je bagovao, tako da ako je nesto ostalo, lakse cu primetiti, pa javljam sta je bilo.

Hvala u svakom slucaju!
[ bogdan.kecman @ 22.05.2012. 01:18 ] @
da li si palio optimizaciju na C18? Moguce da i on zabaguje, ugasi mu optimizaciju da bi bio siguran da nije to (nikad mi se nije desilo da njegove optimizacije baguju, ali je teoretski moguce)
[ grabik @ 22.05.2012. 08:36 ] @
Da su uzrok smetnje ne bi mu jedna varijabla fulala, a isto mogu da se kladim da nije ni do kompajlera, bug je u njegovom kodu, petljanje sa globalnim varijablama i tamo gdje nije potrebno.
[ bogdan.kecman @ 22.05.2012. 12:52 ] @
u 99% slucajeva je PICNIC (Problem In Chair Not In Computer) no kako nije covek stavio kod da vidimo sta radi, o njemu se ne da diskutovati :D
[ Odin D. @ 22.05.2012. 14:31 ] @
^ Kako ne, pa zato su ljudi izmislili bacanje pasulja i prevrtanje soljice za kafu.

Ja cim prodam osciloskop, kupujem kristalnu kuglu.
[ Genie_1984 @ 22.05.2012. 18:16 ] @
Možda ti tip promenljive ne odgovara

npr.

Code:

char varijabla1;
char varijabla2;
...
varijabla1=500;



i eto belaja...

Ali opet bez koda možemo samo da nagadjamo... i ja se slažem za PICNIC :)
[ developer94 @ 23.05.2012. 20:49 ] @
Naravno da koda nema, te zaista mozemo samo da nagadjamo. Razlozi su to sto ce se kod koristiti u uredjajima koji su vlasnistvo ovlascenog servisa za koji ih radim te je kod striktno in-house. Takodje, greska lako moze biti uslovljena plocom koja je u stanju razvoja i koja je pretrpela mnostvo izmena koje naravno mogu uneti neke smetnje. (da nema ta kristalna kugla mozda mogucnost emulacije/uracunavanja hardvera u viziju/odgovor/.pdf ili u kom vec formatu vracaju? ;p) Upravo iz tog razloga pitam, cisto iz radoznalosti, da li se nekome to ovde vec desavalo, posto smatram da ste daleko iskusniji od mene, te ste verovatno naletali na razne igrarije koje se u razvoju desavaju.

PICNIC? U potpunosti se slazem sa time, medjutim, vasi piknici bi isto tako bili vise nego od koristi posto me mogu usmeriti u pravom pravcu.

Resenje sam nasao, i objasnio u nekom od prethodnih postova, ali posto se diskusija nastavlja, onda hajmo bar da je usmerimo u pravom toku!
Sad, ako je neko propustio pitanje sa originalnog posta: Da li globalne varijable zaista mogu da prave takve probleme usled smetnji/da li su podlozne slucajnim promenama? Da li se jos nekome desavalo ovako nesto? - bazirano u potpunosti na iskustvu.
Naravno, tacan odgovor je sve, posto je ovo hipoteticka rasprava, ne? Znaci od PICNIC gresaka koje ja vidim kao neku vrstu iskustva do neke primedbe na meni promakli deo errata dela manual-a.

Ukoliko iz nekih razloga ne mozete/ne zelite da podelite vasa iskustva, to u potpunosti razumem, i zahvalan sam na samom izlasku u susret - problem je ionako, kazem, resen.

Da, cisto da proverim - da li su ovakva pitanja ovde validna, ili jednostavno da preskocim taster nova tema ukoliko naidjem na potrebu za postavljanjem ovakvog pitanja? (na koje na zalost ne postoji konkretan odgovor)
Ukoliko nisu, ja vam se izvinjavam i zamolio bih administratora da ukloni temu, da ne bih trovao ovaj forum ovako necime.
[ bogdan.kecman @ 24.05.2012. 02:47 ] @
Citat:
developer94: Da li globalne varijable zaista mogu da prave takve probleme usled smetnji/da li su podlozne slucajnim promenama?


globalne varijable se nikad ne menjaju same od sebe, isto kao sto se to ne desava ni sa lokalnim varijablama. Lokalne varijable su samo "trap for young players" iliti ako ne znas sta radis, sa globalnom varijablom je lako napraviti gresku koju posle tesko izdebagiras.

varijabla se u mcu-u menja
- kada je namerno promenis u kodu (x = 10)
- kada je slucajno promenis u kodu (pointeri koji gadjaju na pogresno mesto, izlazi iz granica nizova, nisu inicijalizovani etc etc)
- kada mcu krene da ti izvrsava datu (imas goto na smece i slicno)
- kada neki EstagodI prsne u mcu i ovaj "poblesavi" (najcesci primer su smetnje koje ulecu preko adc pina)

varijabla se u mcu-u ne menja (a hteo si)
- ako se zaboravio da je promenis
- ako treba da bude volatile a ti je nisi napravio da bude volatile (npr menjas je u interaptu)

E sad gresaka imas koliko oces, od toga da mislis da editujes lokalnu varijablu a ti editujes globalnu do toga da mislis da editujes globalnu a ti editujes lokalnu, sa jedno 5000 razlicitih gresaka izmedju ..


Citat:
developer94:Da, cisto da proverim - da li su ovakva pitanja ovde validna, ili jednostavno da preskocim taster nova tema ukoliko naidjem na potrebu za postavljanjem ovakvog pitanja? (na koje na zalost ne postoji konkretan odgovor)
Ukoliko nisu, ja vam se izvinjavam i zamolio bih administratora da ukloni temu, da ne bih trovao ovaj forum ovako necime.


sto ne bi, mnogo je lakse i konkretnije kada ima primer pa se u tom primeru direktno vidi sta je greska... jbg svi po nekad rade neki proprietary kod, i ja se 100% zalazem za open source pa opet po nekad moram da nacukam neki proprietary kod koji ne smem da delim .. sve to ima svoje ..
[ goran_68 @ 24.05.2012. 10:24 ] @
Tvoje pitanje je sasvim OK, samo je tesko dati konkretan odgovor. Kad god sam ja imao slican problem greska je bila u kodu. Jednostavno previde se neke stvari i desava se da gledajuci kod stalno prelazis preko greske. Mozda su ti promenljive pogresno deklarisane (char namesto int i sl.) pa ti rezultati matematickih izraza prave problem. Moguce je da se prekidi desavaju brze nego sto ti rutina zavrsi obradu pa imas lazne rezultate. Inace, nijedan errata za mcu koji sam ja pogledao ne navodi da su takve greske moguce. E sad...
[ bogdan.kecman @ 24.05.2012. 11:27 ] @
btw - hw debugger rulez kada krenu takve gluposti da se desavaju, zato ja kazem uvek pickit2 ili pickit3 i nema da boli glava, jesu oni allpic i slicni pateticni programatori koji dinar jeftiniji, ali uzmes od rsinise za 20 nemaca pickit2 klon i lepo step by step direkt na hardweru i pratis sta se desava sa varijablom i kad ce da se promeni .. uvatis bug za 10min koji trazis 10 dana vizuelno
[ developer94 @ 24.05.2012. 13:54 ] @
@goran: Naravno da ne moze da se da konkretan odgovor, toga sam svesta, ali sam dovoljno sposoban da prihvatim savet i uradim kao sto mi je receno (ako nisam, savladacu sta treba, opet nista strasno)
Inace, na promenljivama se ne vrse nikakve operacije sem dodele. U pitanju su kontrolne varijable statemachine-a. Takodje sam ih oznacio kao integere a u njih trpam samo vrednosti iz opsega predvidjenog za int. Vrednosti su definisane tokenima te nije ni greska u prepisivanju. To me najvise mori...

@bogdan: Upravo ovakvom odgovoru sam se nadao (@lista mogucih gresaka)! Recimo resio mi je problem koji bi nastao nakon ukljucivanja optimizacije koja je trenutno ugasena, posto menjam par varijabli samo u interaptu, hvala za primedbu!
A inace bas PICKit2 klon i koristim, tako sam i saznao da mi kontrolne varijable u stvari divlja- dobro, ne divljaju, ali sa vremena na vreme promene, sto opet nije ocekivano ponasanje.
Najverovatnije cu da uzmem i izmenim daj kod opet, i da varijable pobacam u strukture (znam, trebao sam odavno to da uradim), i mesto tokena da koristim enume (naravno nakon sto proverim da li ih C18 uopste podrzava). Uz malo srece, u toku prepiske cu da naidjem na picnic il neki indirektni uzrok.

Hvala momci, odoh sad da cukam, pa raportiram sta se desilo kad zavrsim.

EDIT: E, pa rewrite je gotov! Sada vec sve funkcionise daleko bolje nego do sad! Medjutim, samo sam preoro sve sa tokena i globalnih na strukture i enum-e, sama logika (i potencijalne greske) su ostale nepromenje- nista od toga, upravo sam nasao uzrocnika svega ovoga... PICKit klon sa kojim radim mi je upravo ukljucen i na pauzi debug-a, a motor se cima malo po malo sam od sebe. Iskljucio sam pk2, i gle cuda, radi ko podmazan. Utesna nagrada za pola dana refactoringa: sad vec mnogo lepo izgleda :D

[Ovu poruku je menjao developer94 dana 24.05.2012. u 19:51 GMT+1]