AVR (gc)C furmany
Rancz Lajos
csiga at fosch.com
Tue Jun 6 06:50:34 CEST 2006
Szabados István írta:
> Szima Gábor írta:
>
>> Sziasztok!
>>
>> Epp most torolgetem a szam szelet, elegge feher... ;)
>>
>> ATmega8, gcc-4.0.3
>>
>> "Mezei" kod:
>>
>> ...
>>
>> lokalis_valtozo = globalis_valtozo - 1;
>>
>> if ( lokalis_valtozo <= 110 ) {
>>
>> ...
>> ...
>>
>> }
>> else {
>>
>> ...
>>
>> }
>>
>> Na. Ha epp igaz a feltetel, akkor tiszta sor, megy az elso ag.
>>
>> Kozben "globalis_valtozo" interrupt-bol megvaltozik.
>> Odaer az else-hez, es lass csodat: az "else" ag is lefut.
>>
>> Nem hinnem, hogy normalis ez, de barmi megeshet.
>>
>> Atrendezessel megoldottam (felcsereles vagy segedvaltozo hasznalata), de
>> normalis ez igy?
>>
>>
>>
>
>
> Nem normális, és gyanítom, hogy nem a proci a rossz, hanem valamit nem vettél észre.
> A lokális változó értékét ugyanis csak egyszer vizsgálja a proci, és az eredmény függvényében
> valamelyik ág kerül végrehajtásra.
> Tehát az igaz ág végén nem nézi meg ujra az értékét igy a közbeni megváltozásnak semmi hatása
> sem lehet.
> Arról már nem is beszélve, hogy a lokális változó meg se változhat, hiszen a globális
> azután változik, miután értékét átvette a lokális.
> Ott valami más van gubanc van a programodban.
>
Lehet olyan is, hogy a stacked nem jól van beállítva és
összeszemetelo"dik és az if ágban lévo" fv. hívás az else ágba tér
vissza. I A R alatt elég gyakori ha rosszul állítod be a CSTACK-et és az
RSTACK-et... Milyen szintu" az optimalizáció?
Üdv,
Lajos
.
> Üdv
> István
>
> -----------------------------------
> Szponzorunk: http://tonerbolt.hu/
>
>
More information about the Elektro
mailing list