static promenne v codevisionu

Luboš Melichar lubos.melichar@gmail.com
Čtvrtek Březen 5 15:49:32 CET 2009


tak jsem vypozoroval nasledujici..

v map filu jsem si nasel doposud pouzite promenne ktere plni startup..
tedy static promenne a globalni promenne, jejichz definice je obsazena
v deklaraci.. (byte prom = 3)
vsechny az na ty me "nefunkcni" byly v registrech, vypnul jsem v
codevisionu automatic register allocation a zblaznily se mi vsechny..

jejich hodnoty naprosto neodpovidaji definici..

tak nevim..



2009/3/5 admin.mtech <admin.mtech@gmail.com>:
> hm, tak potom ano, akurat hned v dalsom riadku som toto tvrdenie rozviedol :
>
> "Teoreticky by sa mala nastavit na 0. Prakticky ale treba vediet co s
> nou (s jej pamatovym miestom) urobi cstartup.asm"
> Teoreticky = Norma C
> Prakticky = cstartup.asm, rozne direktivy a pod....
>
> Ale este mate pravdu aj v tomto "V povodnej otazke ale nic take nebolo."
>
> preto k tomu mojm zamysleniu v uvode mojej prvej otazky, som doplnil
> "Co vlastne od tej (tych) premennej potrebujete?"
> Na zaklade dalsej autorovej odpovede som sa dozvedel, ze ho hneva ze sa
> mu premenne ?samovolne? prepisuju.
>
> Takze teraz nasleduje odpoved autorovi:
>  skuste pozriet, ci Vam nepretecie premenna umiestnena na adrese
> (zistite z mapy pamate) pred tymito premennymi.
> Druha moznost je (ak to debug povoluje) nastavit breakpoint pri zmene
> pamatoveho miesta a spustit...
>
> Tretia (ked zlyhaju vsetky pokusy) moznost je, venovat sa inej cinnosti
> (asi viete akej) a k problemu sa vratit neskor, a skontrolovat znova
> stacky, alokacie pamate, velkost poli, vystupy printf a pod....
>
>
> -mt-
>
>
>
> Miroslav Šinko  wrote / napísal(a):
>> Z Vasho povodneho mailu:
>>
>>
>>>> To ale nenamena, ze po starte programu bude mat premenna definovanu hodnotu.
>>>>
>>
>> Norma DEFINUJE, ze ak staticka premenna nie je explicitne
>> inicializovana, bude nastavena na 0.
>> " -- if it has arithmetic type, it is initialized to (positive or
>> unsigned) zero;"
>>
>> Teda toto Vase tvrdenie nie je pravda. Rozsirenia kompilatora norma
>> nedefinuje, ked komipaltor umoznuje _no_init_ a uzivatel to pouzije,
>> mal by vediet, co robi. V povodnej otazke ale nic take nebolo.
>>
>>
>> miro
>>
>>
>> 2009/3/5 admin.mtech <admin.mtech@gmail.com>:
>>
>>> Prosim Vas, a co nie je pravda? Nejako sa v tom prispevku neviem
>>> dopatrat rozdielu voci tomu co som pisal....
>>> Ako som pisal:
>>> Direktiva (ano, spravne je direktiva) "static" vravi kompileru, ze
>>> premenna pouziva staticku pamat. Pod cim ja rozumiem, ze ma pevne
>>> pridelenu adresu v pamati.
>>> Druhe moje tvrdenie "Teoreticky by sa mala nastavit na 0", Vasa citacia
>>> iba potvrdzuje.
>>> A tym, ze pred premennu vrazim IAR-ovske "_no_init_" poviem kompileru
>>> aby tuto premennu neinicializoval (nulovat) po resete.
>>> Neviem ako sa "_no_init_" pise v codevision, ale cez cstartup.asm sa to
>>> da ovplyvnit (okrem ineho)...
>>>
>>> Co som poplietol?
>>>
>>> -mt-
>>>
>>>
>>> Miroslav Šinko  wrote / napísal(a):
>>>
>>>> To nie je pravda, dokonca norma ANSI C hovori o hodnotach
>>>> neinicializovanych premennych:
>>>>
>>>> 10 If an object that has automatic storage duration is not initialized
>>>> explicitly, its value is
>>>> indeterminate. If an object that has static storage duration is not
>>>> initialized explicitly,
>>>> then:
>>>> -- if it has pointer type, it is initialized to a null pointer;
>>>> -- if it has arithmetic type, it is initialized to (positive or unsigned) zero;
>>>> -- if it is an aggregate, every member is initialized (recursively)
>>>> according to these rules;
>>>> -- if it is a union, the first named member is initialized
>>>> (recursively) according to these
>>>> rules.
>>>>
>>>> miro
>>>>
>>>> 2009/3/5 admin.mtech <admin.mtech@gmail.com>:
>>>>
>>>>
>>>>> pokial viem klucove slovo "static" vravi, ze nasledne deklarovana
>>>>> premenna bude mat priradene pamatove miesto aj po vyskoceni z funkcie.
>>>>> Cize sa z nej vlastne stane globalna premenna.
>>>>> To ale nenamena, ze po starte programu bude mat premenna definovanu hodnotu.
>>>>> Teoreticky by sa mala nastavit na 0. Prakticky ale treba vediet co s
>>>>> nou  (s jej pamatovym miestom) urobi cstartup.asm
>>>>> Pokial sa pouzije (u IAR-a) klucove slovo _no_init_, tak sa nebude
>>>>> nulovat po resete.
>>>>>
>>>>> Co vlastne od tej (tych) premennej potrebujete?
>>>>>
>>>>> -mt-
>>>>>
>> _______________________________________________
>> 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
>



-- 
Sportuješ? Meloun tě zve na www.esportuj.cz !
Programuješ? Baví tě elektronika? Mrkni na meloun.esportuj.cz !



Další informace o konferenci Hw-list