[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