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