C-s kerdes
Moczik Gabor
pm at progzmaster.hu
Tue Jun 19 21:09:14 CEST 2007
Balla Zoltán wrote:
> MCC-ben irok egy programot PIC-re, es van egy modulom, amiben unsigned char
> Sec; deklaralok egy valtozot. A modul egyik fuggvenyeben inkrementalom ot,
> majd mikor eleri a 153-at, ki kellene nullaznom. A baj ott kezdodik, hogy ez
> a valtozo alapban nem 0-rol indul. Ez mondjuk meg ertheto is, hisz nem adtam
> neki kezdeti erteket.
Ha globalisnak deklaralod, akkor alapol 0, ha egy fuggveny lokalis
(automatikus) valtozoja, akkor az erteke alapbol definialatlan.
Most arra nem vennek merget, hogy a lokalis static es a globalis static
valtozok vajon hogyan viselkednek, de tudomasom szerint az utobbi nincs
inicializalva.
Ha globalis, es nem-nulla az erteke, akkor ott mar valami fordito gond lesz,
en a hitech picc18-nal szivok hasonloval...
> Azonban kb 60...70 kozott vacilal csak, sohasem eri el
> a 153-at!!! Kiprobaltam, ez van akkor is ha unsigned char Sec=0; vagy static
> unsigned char Sec; vagy static unsigned char Sec=0; modon deklaralom. Mivel
> modulon belul vegilis csak 1 fuggvenyben hivatkozok ra, igy kesobb
> beleraktam magaba a fuggvenybe, static unsigned char Sec; modon. ekkor
> ugyanugy szar volt. Viszont ha static unsigned char Sec=0; modon
> deklaraltam, akkor meg jo volt!!!
Ugyanezt a valtozot nem hasznalod pl. megszakitasbol is?
Ha olyan jellegu valtozo, amit a foprogram olvas es a megszakitas ir bele,
akkor 'volatile'-kent kell deklaralni, ami utasitja a forditot, hogy ne
tarolja (cache-elje) regiszterekben, hanem mindig a memoriabol olvassa ki,
mert egy hatterfolyamat megvaltoztathatja az erteket.
--
((( Móczik Gábor )))--((( pm -> @ -> progzmaster -> . -> hu )))
((( Skype: moczik )))
More information about the Elektro
mailing list