avr-gcc ,hazudik az if:-)

Papp Zoltán zombi at c2.hu
Tue Sep 12 00:50:02 CEST 2006


2006.09.11. 10:45:32 dátumon Pal Lukacs <ekegep at yahoo.com> írta:

> Amugy sok alkalmazasban latom,hogy a main() vegen van egy ures vegtelen  
> ciklus.Ezt nem ertem,hogy miert kell?

Előttem már elmondták, én még annyit fűznék hozzá, hogy azért is kell a  
végtelen ciklus, mert a uC program-számlálója (t.i. melyik programsor lesz  
a köv. végrehajtandó utasítás) minden utasítás után a köv. utasításra  
mutat. Ha nem teszel a végére egy végtelen ciklust, akkor két dolog  
történhet, fordítótól függően: vagy a main()-t egy eljárásnak veszi, tehát  
a main() végén lesz egy return, ami ki tudja hova mutat (jobb esetben a  
visszatérés után egy végtelen ciklus van :-) ); vagy az utolsó utasítás  
után tovább megy a PC (Prg.Counter), ami a flash végén túlcsordul, és 0-ba  
áll, ami kvázi egyenlő egy RESET-tel, csak a SRAM tartalma megmarad.

Egyébként a végtelen ciklus csak akkor üres, ha a proci csak  
interruptokban dolgozik. Én általában minden olyan dolgot, ami proci  
szempontjából egy örökkévalóság, a felhasználó szempontjából azonban csak  
egy szempillantás (>1-10msec), pl. az LCD-kiíratást, eeprom-írást,  
állapot-átváltásokat, stb... a main()-ben végeztetem el; ahol nem számít,  
hogy 15 v. 20msec alatt végez a proci. Persze ezeket is meg lehetne írni  
interruptban, csak sokszor nagyobb szívás. Csak arra kel vigyázni, mikor  
engeded/tiltod, hogy a főprogramban interrupt generálódjon.

,a masik meg az hogy ,hogy nem eszi
> meg a procit teljes egesszeben?hogy tud dolgozni a proci mas muveleteken  
> emellett?Ez PC-nel teljes program fagyas lenne.
> Udv.

A fentiekből látszik, ha nincs semmi a végtelen ciklusban, akkor az  
interruptok jönnek-mennek, tehát a proci attól még működik.
De pl. én írtam már olyan progit, amiben egy fia interrupt sincs.

Üdv
-- 
Papp Zoltán
OneWay Electronics



More information about the Elektro mailing list