IMHO u procesoru, kteryma spolecny vektor preruseni pro defakto vsechny zdroje a je nutne kontrolovat flagy, neni ta rychlost az zas tak to .... :)<br>ja to mam debordelizovane tim zpusobem, co tu byl uz popsan - v ISR fci volani funkce obsluhy preruseni danou periferii. Pak samozrejme jeste vyvstavaji otazky jesli kontrolu flagu dane periferie dat do hlavni ISR nebo schovat do funkci jednotlivych periferii. Opet to bude mit dopad na rychlost vykonani preruseni, zalezi jak moc uhledne to kdo chce a kolik je ochoten obetovat strojoveho casu :)<br>
<br clear="all"><div>Ataman<br><a href="http://www.hysteria-metal.cz" target="_blank">http://www.hysteria-metal.cz</a><span style="padding-right:16px;width:16px;height:16px"></span><br></div>
<br><br><div class="gmail_quote">2013/2/4 Milan B. <span dir="ltr"><<a href="mailto:milan@bastl.sk" target="_blank">milan@bastl.sk</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF"><div class="im">
<div>On 2/4/2013 3:15 PM, Miroslav Draxal
wrote:<br>
</div>
<blockquote type="cite">
<div>
<p class="MsoNormal">Dobrý den,<u></u><u></u></p>
<p class="MsoNormal">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<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</blockquote>
<br></div>
Snad som pochopil, o co ide...<br>
<br>
Nepoznam dany prekladac, tak naznacim vseobecnu cestu:<br>
<br>
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.<br>
<br>
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.<br>
<br>
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)<br>
<br>
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)<br>
<br>
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.<span class="HOEnZb"><font color="#888888"><br>
<br>
-m- <br>
<br>
</font></span><blockquote type="cite"><div class="im">
<div>
<p class="MsoNormal">SPI.c<u></u><u></u></p>
<p class="MsoNormal">void interrupt low_priority SPIinterrupt
(void)<u></u><u></u></p>
<p class="MsoNormal">{<u></u><u></u></p>
<p class="MsoNormal"> if (SSPIE && SSPIF)<u></u><u></u></p>
<p class="MsoNormal"> {<u></u><u></u></p>
<p class="MsoNormal"> ……<u></u><u></u></p>
<p class="MsoNormal"> }<u></u><u></u></p>
<p class="MsoNormal">}<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">a<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">TMR2.c<u></u><u></u></p>
<p class="MsoNormal">void interrupt low_priority TMR2interrupt
(void)<u></u><u></u></p>
<p class="MsoNormal">{<u></u><u></u></p>
<p class="MsoNormal"> if (TMR2IE && TMR2IF)<u></u><u></u></p>
<p class="MsoNormal"> {<u></u><u></u></p>
<p class="MsoNormal"> ….<u></u><u></u></p>
<p class="MsoNormal"> }<u></u><u></u></p>
<p class="MsoNormal">}<u></u><u></u></p>
<p class="MsoNormal">--------------------------přeloží to takhle<u></u><u></u></p>
<p class="MsoNormal">0x0016 – low interrupt vektor<u></u><u></u></p>
<p class="MsoNormal">uloží reg<u></u><u></u></p>
<p class="MsoNormal">SPIinterrupt<u></u><u></u></p>
<p class="MsoNormal">Načte reg<u></u><u></u></p>
<p class="MsoNormal">0x0090RETFIE<<<<<<<<<<<<<<<u></u><u></u></p>
<p class="MsoNormal">0x0091uloží reg<u></u><u></u></p>
<p class="MsoNormal">TMR2interrupt<u></u><u></u></p>
<p class="MsoNormal">Načte reg<u></u><u></u></p>
<p class="MsoNormal">0x0150RETFIE<<<<<<<<<<<<<<<<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<br>
<br>
__________ Informace od ESET NOD32 Antivirus, verze databaze 7968
(20130204) __________<br>
<br>
Tuto zpravu proveril ESET NOD32 Antivirus.<br>
<br>
<a href="http://www.eset.cz" target="_blank">http://www.eset.cz</a><br>
<br>
<fieldset></fieldset>
<br>
</div><div class="im"><pre>_______________________________________________
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</div></blockquote>
<br>
</div>
<br>_______________________________________________<br>
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br></blockquote></div><br>