[elektro] C kérdés

Miko, Imre imre.miko at siemens.com
Mon Feb 4 10:13:29 CET 2008


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.

Udv,
Imre



More information about the Elektro mailing list