Chyba v programu

Jan Kral kral@fortech.cz
Úterý Listopad 25 18:37:15 CET 2008


V pripade podezreni na problem s atomicitou operaci s vicebajtovymi promennymi skutecne muze dochazet k ruzne podivnym zmenam v datech. Popsane reseni je funkcni, ale ne jako reseni problemu, ale jako metoda na nalezeni toho zda je toto skutecne problemem. Jestli ano, tak je to pak potreba vyresit nejakym makrem ci jinak (napr. kdyz to podporuje prekladac). 
Podle symptomu to skutecne vypada na nejaky takovyto problem a s vetsi cetnosti preruseni se zvysi pravdepodobnost toho, ze se preruseni vyvola uprostred operace s vicebytovou promennou. Jeste vetsi legrace muze nastat v pripade, ze by jste s takovouto promennou bez osetreni na atomicitu nekde pracoval bez ukladani (pouzil ve vyrazu pripadne v podmince) a pak se divil jak je mozny obcasny vysledek napr. 257, kdyz mozne stavy jsou napr. jen 256 a 1. Kdyz to napisete takto, tak je to jasne, ale je-li to v hotovem programu, tak se pak clovek jen divi.

S pozdravem JK

> 
> Tohle není dobrý přístup.
> - jen s velkými problémy zjistíte všechny  případy ve kterých 
> se to může 
> stát.
> - je to pracné
> - není to řešení příčiny ale obcházení následku.
> - v budoucnosti wse vám to vymstí, protože na to zapmenete. 
> nebo někomu 
> jinému kdo bude modifikovat program.
> - zpožďuje se tím obsluha přerušení, což může být problém, protože se 
> zpožďuje o obtížně definovatelnou dobu
> 
> Jak jsem se již zmiňoval, je zajištěno že v přerušení nedojde 
> k přepsání 
> registru procesoru? S PICama jsem nikdy nedělal, ale 
> předpokálám že to 
> je CISC procesor s málo registry, tak někdy můře dojít k přepsání ve 
> funkci ze které se to přerušení vyvolá. U malých osmibitů 
> není pravidlem 
> že se před volámím funkce překladač uloží všechny registy zo dá 
> zásobníku a pak se zase obnoví, musí se mu to oznámit (např. 
> parametrem 
> k funkci - reentrantí funkce - jak to říci česky?) nebo zajisti aby 
> přerušení pužívalo svojí a pouze svojí sadu registrů.
> 
> Jelikož se tazatel mikde nezmiňuje o tom co jak je kód vlstně 
> přeložen 
> tak bych navrhoval (nepředpolkádám že to není, ale ať se máme od čeho 
> odrazit - za křišťál dnesk chtejí děsný prachy)
> - je zakázáno přerušení v které vyvolalo funkci přerušení v 
> dané obsluze 
> přerušení (první věc zakážu, podlední povolím)
> - používá obsluha přerušení svoje vlastní registry? A pokud ne je 
> přeložena jako reentrant? (viz asm výpis kódu)
> 
> pokud jsou tyto věci zajištěny, můžeme pokročit dále, jinak je to 
> krafaní u piva. A na to mi chybí pivo.
> ced
> 
>  Richard Kaliciak wrote:
> > Dobry den,
> >
> >   
> >>> V tomto duchu pracuji, ale chyba se vyskytuje obcas. 
> Poustim tam ruzne data 
> >>> a prumer chyb je tak 1 za hodinu. Takze to zabira spostu casu. 
> >>>       
> >
> > to vyzera na porusenie atomicity nejakej operacie s 
> premennymi typu int 
> > tym prerusenim. Nedavno tu dokonca bezala jedna "piatkova 
> sutaz" na tuto 
> > temu, zda sa mi, ze to spustil wek.
> > Ak v tom preruseni citate alebo zapisujete do viacbytovych 
> premennych, 
> > ktore sa pouzivaju aj v hlavnom programe, tak zakazte pred 
> pristupom k 
> > tymto premennym v hlavom programe prerusenie (a potom 
> samozrejme povolte).
> >
> > Richard Kaliciak
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz
> > Hw-list@list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
> >   
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 



Další informace o konferenci Hw-list