Forum » Programiranje » for zanka [C] - manjšanje
for zanka [C] - manjšanje
mitchman ::
Živjo. Imam problem s programiranje for zanke. In sicer če odpiram porte od 0 naprej, mi vse deluje kot bi moralo. Če pa hočem uporabiti drugačen vrstni red odpiranja ne deluje. A kdo ve kaj je narobe s kodo?
DELUJOČA:
NEDELUJOČA:
Sklepam pa, da je nekaj narobe z deljenjem.
DELUJOČA:
... for (t=1; t<=128; t*=2) { PORTC = t; _delay_ms(1000); }...
NEDELUJOČA:
... for (t=128; t>0; t/=2) { PORTC = t; _delay_ms(800); }...
Sklepam pa, da je nekaj narobe z deljenjem.
- spremenil: mitchman ()
rasta ::
Ker vidim, da programiraš mikrokrmilnike, ga verjetno biksa compiler. Imaš možnost, da pogledaš kakšno kodo compiler izpljune (v zbirniku)?
Sicer pa zakaj sploh potrebuješ deljenje in množenje? Kaj je pa narobe z operatorji za pomikanje bitov: << in >>?
Sicer pa zakaj sploh potrebuješ deljenje in množenje? Kaj je pa narobe z operatorji za pomikanje bitov: << in >>?
zdobersek ::
Najhitrejša rešitev bi bila, da spremeniš pogoj 't > 0' v 't > 1'. Tako se zanka zaključi, ko je t enak 2.
gumby ::
Prvi primer ne bi smel delovat, ker je t vedno manjši ali enak 128. V kolikor "navaden int" pomeni 8 bitov...
my brain hurts
mitchman ::
Če priključim na ledice, mi izredno hitro vklaplja in izklaplja eno ledico. Dela isko, kot če bi v for dal: PORTC=128; delay(okrog 10ms);
t je pa takle:
int t;
t je pa takle:
int t;
mitchman ::
shino -> To ne reši zadeve. Še vedno se obnaša nenavadno.
rasta -> Resda so operatorji za pomikanje bitov najelegantnejša rešitev, samo zanima me, zakaj to ne dela. Očitno je res nekaj s compilerjem. Am...katero kodo to misliš?
rasta -> Resda so operatorji za pomikanje bitov najelegantnejša rešitev, samo zanima me, zakaj to ne dela. Očitno je res nekaj s compilerjem. Am...katero kodo to misliš?
rasta ::
Kako velik pa je tip int? 8 bitov?
Potem imaš na voljo samo vrednosti od -128 do 127 in se zanka sploh ne izvede, kot je pravilno ugotovil gumby, program se pa znova in znova zaganja - možen vzrok za hitro utripanje LED-ic.
Imaš možnost, da ti kompiler napravi program v zbirniku namesto binarnega imidža?
Potem imaš na voljo samo vrednosti od -128 do 127 in se zanka sploh ne izvede, kot je pravilno ugotovil gumby, program se pa znova in znova zaganja - možen vzrok za hitro utripanje LED-ic.
Imaš možnost, da ti kompiler napravi program v zbirniku namesto binarnega imidža?
mitchman ::
Da, 8 bitni je. Vendar tudi če začetno vrednost t-ja nastavim na 64 ali 32 ali karkoli manjšega, mi dela popolnoma enako, le da z drugo LEDico.
Kar se pa kompilerja tiče pa ne vem kako bi to ustvaril. Nisem še nikoli tega počel. Povej kakšen naj bi bil ukaz pa pogledam. Aja, če pomaga: kompiler je pa AVR Studio 4.
Kar se pa kompilerja tiče pa ne vem kako bi to ustvaril. Nisem še nikoli tega počel. Povej kakšen naj bi bil ukaz pa pogledam. Aja, če pomaga: kompiler je pa AVR Studio 4.
gumby ::
Clock pa koliko? 4.8MHz mogoče?
Daj malo več informacij, saj ne gre za top-secret zadevo ane?
Drugače bomo lahko samo ugibali...
Daj malo več informacij, saj ne gre za top-secret zadevo ane?
Drugače bomo lahko samo ugibali...
my brain hurts
mitchman ::
Tu je celotna koda:
#define F_CPU 1000000UL // 1 MHz CPU clock #include <util/delay.h> #include <avr/io.h> int main (void) { int t; DDRC=0xFF; PORTC=0x00; while (1) { for (t=64; t>1; t/=2) { PORTC = t; _delay_ms(800); } } return 0; }
Zgodovina sprememb…
- spremenil: mitchman ()
mitchman ::
Ups :)
Menim, da je z nastavitvami vse OK, ker če for zanko nastavim, da gre od 1 naprej vse dela kot je predvideno.
Torej če je:
Menim, da je z nastavitvami vse OK, ker če for zanko nastavim, da gre od 1 naprej vse dela kot je predvideno.
Torej če je:
for (t=1; t<64; t*=2)
Zgodovina sprememb…
- spremenil: mitchman ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | java pomočOddelek: Programiranje | 1952 (1344) | kr?en |
» | Programiranje PICa za krmiljenje peči v COddelek: Programiranje | 1202 (929) | 20sdfj093f |
» | PIC18F4550 in ds18s20Oddelek: Elektrotehnika in elektronika | 1983 (1662) | snow |
» | programiranje procesorja (strani: 1 2 3 4 … 8 9 10 11 )Oddelek: Elektrotehnika in elektronika | 36554 (25955) | icek |
» | PIC 16f84A - utripanjeOddelek: Elektrotehnika in elektronika | 2205 (2005) | ql000 |