zase C -Hi-Tech

Miroslav Draxal evik na volny.cz
Pondělí Únor 4 16:36:47 CET 2013


Nějak jsem vnitřně doufal, že přesně tu "naked" fukci právě umí to
přerušení. No nic. Prostě tuto myšlenku musím opustit. Míra

 

From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
Behalf Of Milan B.
Sent: Monday, February 04, 2013 4:17 PM
To: hw-list na list.hw.cz
Subject: Re: zase C -Hi-Tech

 

On 2/4/2013 3:15 PM, Miroslav Draxal wrote:

Dobrý den,

Snažím se deborelizovat projekt, mám ale problém s přerušením. Jak docílit
toho, abych všechen kód od SPI v jednom souboru včetně přerušení. To stejné
např. pro TMR2. Pokud to napíši takhle (viz dole) tak to přeloží za sebou,
ale jako dvě low přerušení, a na to druhé se nedostane. RETFIE je již za
přerušením od SPI. Koukám do dokumentace, a nějak nemohu najít co s tím. Jde
to vůbec? Děkuji ve spolek za reakce. Míra

 


Snad som pochopil, o co ide...

Nepoznam dany prekladac, tak naznacim vseobecnu cestu:

Kedze su to dve samostatne funkcie, tak su kompletne aj s prologom, a
epilogom (vratane navratu), tak jednoduche riesenie nie je, kompilator - a
uz vobec nie linker - nema ako vediet, ze ma nejaky kusok funkcie vynechat.

Taketo "zliepanie" funkcii sa da riesit (ak to prekladac podporuje)  cez
"naked" funkcie. Treba sa pozriet, ci prekladac podporuje atribut funkcie
"naked" a ake ma obmedzenia. "naked" funkcia nema prolog a epilog.

Potom je treba zabezpecit, aby linker vsetky taketo "funkcie" zlinkoval do
jednej sekcie (atribut "section" alebo tak nejako) v definovanom poradi -
aby boli funkcie za sebou (a vykonavanie prechadzalo z jednej do druhej)

Potom treba na zaciatok takejto sekcie natlacit vstupny bod pre prerusenie a
prolog - ulozenie registrov a na koniec takejto sekcie epilog - obnovenie
registrov a navrat z prerusenia - oboje najlepsie v ASM (dalsie dve male
"naked" funkcie)

Myslim, ze akekolvek riesenie je lepsie ako snaha pozliepat viac funkcii do
jednej. Napriklad ekvivalentnym riesenim (zlinkuje sa samo) moze byt
dispecerska tabulka, do ktorej sa pri linkovani funkcii prida smernik na
funkciu a samotna prerusovacia rutina iba prebehne tuto tabulku a zavola
vsetky funkcie.

-m- 




SPI.c

void interrupt low_priority SPIinterrupt (void)

{

    if (SSPIE && SSPIF)

    {

    ..

    }

}

 

a

 

TMR2.c

void interrupt low_priority TMR2interrupt (void)

{

    if (TMR2IE && TMR2IF)

    {

     ..

    }

}

--------------------------přeloží to takhle

0x0016 - low interrupt vektor

uloží reg

SPIinterrupt

Načte reg

0x0090RETFIE<<<<<<<<<<<<<<

0x0091uloží reg

TMR2interrupt

Načte reg

0x0150RETFIE<<<<<<<<<<<<<<<

 



__________ Informace od ESET NOD32 Antivirus, verze databaze 7968 (20130204)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz





_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list




__________ Informace od ESET NOD32 Antivirus, verze databaze 7968 (20130204)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz



__________ Informace od ESET NOD32 Antivirus, verze databaze 7968 (20130204)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20130204/1267eaf4/attachment.htm>


Další informace o konferenci Hw-list