[elektro] C kérdés
hg12345
hg12345 at freemail.hu
Mon Feb 4 14:35:32 CET 2008
Szia!
> Szia,
>
> > -----Original Message-----
> > From: elektro-bounces at tesla.hu
> > [mailto:elektro-bounces at tesla.hu] On Behalf Of hg12345
> > Sent: 2008. január 31. 13:32
> > To: elektro at tesla.hu
> > Subject: Re: [elektro] C kérdés
> >
> > Adott egy IT kezelés ami szubrutint hív, a szubrutin használ
> > 1-2 regisztert, de ha olyan szubrutint hivok ami nem
> > tartalmaz semmit, csak pl egy volatile NOP-t, akkor is
> > elmenti a C-ben általánosan használt regisztereket, még
> > optimalizálásnál is. Ha nincs szubrutin hivás, akkor csak
> > azokat a regisztereket menti, amiket az IT-ben használ.
> > (valószínüleg nem találtam meg mélységi szubrutin
> > optimalizáció flagjét)
>
> Ha csak egy IT-nel kell a dolog, akkor hasznalhatod a shadow
attributumot.
> Ekkor az adott IT-hez nem a stack-be, hanem a regiszterekhez
tartozo arnyekregiszterekbe
> menti a tartalmakat. Ekkor is elment mindent, de sokkal gyorsabban,
igy az IT kezelesed
> tovabbra is gyors lesz.
>
> shadow
>
> The shadow attribute causes the compiler to use the shadow
registers rather than the
> software stack for saving registers. This attribute is usually used in
conjunction with the
> interrupt attribute.
> void __attribute__ ((interrupt, shadow)) _T1Interrupt (void);
>
> vagy roviden:
>
> void _ISRFAST _T1Interrupt (void);
>
>
> Ha az INTCON1-ben a NSTDIS bit-et 1-re allitod, akkor letiltod a IT-k
egymasba agyazasat,
> azaz amig le nem fut az elozo, addig nem kovetkezik be a kovetkezo,
ha nagyobb a proiritasa
> akkor sem. Tehat ebben az esetben szerintem tobb IT-ben is
hasznalhatod.
>
Az _ISRFAST vagy shadow attributum, nem sokat segit, mert IT-ből
történő szubrutin hivás esetén továbbra is minden C-ben járatos
regisztert ment, W0...W7 és REPT-t.
A SHADOW csak azt jelenti, hogy a PUSH.S és POP.S utasitásokkal
inditja és zárja le a IT feldolgozást.
Ez 1+1 utasítással rövídití a programot és 3+3 utasítás idővel gyosítja
helyettesítése:
push.d w0 push.s
push.d w2
isr
pop.d w2
pop.d w0 pop.s
retfie
Az egymásba ágyazást meg nem szeretném kitiltani, ha már van annyi
memória, hogy a eszköz képes megcsinálni :-().
Nem sebesség bajom van, (csak lesz:-) hanem most probálok átállni C-
re ASM-ből. Sajnos az eddig megnézett C programok egyike se képes
igazán bitmüveletekre forditani (bites skip és ugro utasításokat nem
ismeri) minden ilyen müveletet vissza vezet a Z flagre, ill nem képes
sok dolgot optimálisan megoldoldani a PIC24/dsPIC-en. Ez igy nem
olyan komoly problémának tünik, de egy komolyabb periféria kezelő
program esetén a futási időt és helyet képes megduplázni. Ezek
általában IT-ben vannak, és arányaiban többször futnak, mint a
föprogram egyes részei, ezért eröteljes hatással lehet a uC effektiv
teljesítményére.
üdv
kösz a gondolatot
HÁZTARTÁSI GÉPET szeretnél? RENDELJ MOST! AKCIÓS árak!
AEG-ELECTROLUX mosógépek, mosogatógépek, tűzhelyek, hűtők, beépíthető gépek
RAKTÁRRÓL AZONNAL az AEGshop.hu-tól
http://ad.adverticum.net/b/cl,1,6022,239723,284071/click.prm
More information about the Elektro
mailing list