static promenne v codevisionu

admin.mtech admin.mtech@gmail.com
Čtvrtek Březen 5 15:02:55 CET 2009


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
>   




Další informace o konferenci Hw-list