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