Sei sulla pagina 1di 11

Ing.

Gabriele MONTI 1999 - 2005

Software per interrupt

www.ingmonti.it

1 Il software d'interruzione
a routine !i ri"po"ta all#interru$ione %IS&' ( a"in)rona ri"petto al programma in e"e)u$ione* ")atta +uan!o )e n,( bi"ogno* non +uan!o -uole il programmatore. a ./0 pu1 e""ere interrotta mentre "ta e"eguen!o un +ual"ia"i programma* in un "uo +ual"ia"i punto* per )ui la routine !i ri"po"ta non pu1 fare affi!amento "ul programma )2e "ta interrompen!o3 !e-e e""ere )ompleta e! auto"uffi)iente e ripri"tinare regi"tri e "ta)4 )ome erano al momento !el "uo inter-ento. /er +ue"to !e-e effettuare opera$ioni !i "al-ataggio e ripri"tino !i tutti i regi"tri )2e la IS& utili$$a. 5ue"te opera$ioni -engono !ette 6salvataggio del contesto6 %)onte7t "a-ing'. 8un+ue o))orre rimar)are )2e nel )ampo !elle routine !#interru$ione ( obbligatorio la")iare le )o"e )ome le "i erano tro-ate* pena il blo))o !ell#intero )omputer.

1.1 Problemi delle routine d'interruzione


Dati della ISR
9""en!o ne)e""ario non mo!ifi)are nulla !ell#informa$ione )2e )o"titui")e lo "tato !el programma )2e "i ( interrotto %)io( !i )i1 )2e -iene !etto il )onte"to !el programma interrotto'* la IS& !o-r: "al-are ogni )o"a )2e e""a utili$$a %regi"tri !i !ati e !i "egmento* "ta)4* parti)olari lo)a$ioni !i memoria )2e non -anno la")iate mo!ifi)ate* ..' pro--e!en!o a ripri"tinare il )ontenuto ini$iale prima !i e"eguire la I&9T. /er la memori$$a$ione temporanea !el )onte"to !el programma interrotto e per e-entuali !ati lo)ali* la IS& potr: utili$$are la memoria o* per i !ati temporanei* an)2e lo "ta)4.

Aree di memoria locali alla ISR


0n#area !i memoria lo)ale pu1 far )omo!o a! una IS&* in +ual)2e )a"o an)2e al po"to !ello "ta)4* per la memori$$a$ione !el )onte"to o per )ontenere !ati )2e po""ano e""ere utili$$ati !a altri programmi. a "ua !efini$ione ( analoga a tutte le !efini$ioni !i aree !i memoria in ;""embl< =0=>. Si potranno !efinire !i-er"e eti)2ette* una per ogni ?-ariabile@ !efinita. Naturalmente il "egmento !ati !efinito !e-e e""ere )on"i!erato A;&. .i1 "ignifi)a )2e "i !o-r: "al-are 8S !el programma interrotto* ")ri-ere in 8S il -alore !el "egmento !ati lo)ale e ripri"tinare il -alore -e))2io prima !ella I&9T. 0n e"empio* )2e utili$$a l#e7tra "egmentB
LocalDATA SEGMENT Buffer DW 50 DUP (?) ; buffer di a o!!io" u# $e%%ore di &ord er la 'e'ori((a(io#e dei da%i le%%i dalla )S* ; i da%i $erra##o +ucce++i$a'e#%e u+a%i dai ro!ra''i c,e u%ili((a#o -ue+%a )S* S%ri#!aDiA o!!io DB .0 DUP (?) ; u#a +%ri#!a %e' ora#ea er l/u+o i#%er#o da ar%e della )S* LocalDATA ENDS 00 ASSUME ES" LocalDATA ; i# -ue+%o e+e' io u%ili((ia'o ES er la le%%ura e +cri%%ura #el +e!'e#%o da%i della )S* )S*" ; +al$a l/E1%ra Se!'e#% del ro!ra''a i#%erro%%o" PUS2 ES PUS2 A3 ; fa u#%are ES al #o+%ro +e!'e#%o da%i locale" M45 A36 SEG LocalDATA M45 ES6 A3

; 00 da -ui c/7 il codice della )S*6 c,e u+a #or'al'e#%e il +e!'e#%o da%i defi#i%o; 0e+0" M45 S)6 488SET S%ri#!aDiA o!!io M45 AL6 ES"9S): ; re#de il ri'o cara%%ere della +%ri#!a %e' ora#ea (o$erride co# ES) ; 00 ri'a della fi#e della )S*" ; ri ri+%i#a i re!i+%ri u+a%i P4P A3 ; ri ri+%i#a l/E1%ra Se!'e#% del P4P ES

ro!ra''a i#%erro%%o"

)*ET

0n,area !i memoria lo)ale* per -ariabili )2e -anno )an)ellate al ritorno !alla IS&* "i pu1 ri)a-are an)2e !allo "ta)4* "po"tan!o lo "ta)4 pointer -er"o gli in!iri$$i piC ba""i !i tante lo)a$ioni +uante "er-ono per la memori$$a$ione tempora2D Sw Interrupt."7w Eer. 0.=.0 2001-01-1F p. 1 !i 11

Ing. Gabriele MONTI

www.ingmonti.it

nea %te)ni)a !ello 6"ta)4 frame6 gi: illu"trata nel )apitolo "u . e ;""embl<6' e! u"an!o +uelle lo)a$ioni !ello "ta)4 )o"G 6allo)ate6.

Salvataggio nello stack


Se i !ati "ono temporanei* po""ono e""ere )an)ellati prima !ella fine !ella IS&. In +ue"to )a"o il "al-ataggio pu1 a--enire an)2e nello "ta)4. Hi"ogna fare atten$ione a non u"arne troppo* per)2I non "i "a +uale "ia la "itua$ione !ell#area !i "ta)4 )2e il programma interrotto "ta u"an!o e "i potrebbe )orrere il ri")2io !i riempirlo. Se una IS& 2a bi"ogno !i molto "ta)4* !e-e !efinire una propria area !i "ta)4 %e !i )on"eguen$a "al-are SS e S/ !el programma )2e 2a interrotto'. 9"empioB per !efinire una propria area !i "ta)4 il programma )2e in"talla la IS& potr: fare )o"GB
LocalSTA;< SEGMENT E%ic,e%%a;,eNo#U+oMai DB =0>? DUP (?) ; co+@ alloca lo + a(io i# 'e'oria er u#o +%acA di = AbB%e )#i(ioDelloS%acA LABEL W4*D ; la dire%%i$a LABEL W4*D fa defi#ire u#/e%ic,e%%a c,e $errC u+a%a co# u# %ra+feri'e#D %o a =E bi% 'a #o# fa allocare ; 'e'oria LocalSTA;< ENDS LocalDa%a SEGMENT SS$ecc,ioS%acA SP$ecc,ioS%acA LocalDa%a ENDS DW DW ? ? ; de$e co#%e#ere il ; de$e co#%e#ere il u#%a%ore al +e!'e#%o del $ecc,io +%acA u#%a%ore all/off+e% del $ecc,io +%acA

ASSUME SS" LocalSTA;< ; ora il co' ila%ore +a c,e l/area da%i c,ia'a%a LocalS%acA 7 u#o +%acA ; 00 )S*" oi6 #el codice della )S*"

PUS2 A3 ; +al$o6 #ello +%acA del ro!ra''a i#%erro%%o6 A36 erc,F lo u%ili((o +ubi%o M45 A36 SEG LocalDa%a ; arc,e!!io i# A3 erc,F DS #o# a''e%%e la 'odifica i# i'D 'edia%o M45 DS6 A3 ; carico DS co# l/i#diri((o di +e!'e#%o dell/area da%i locale M45 9SP$ecc,ioS%acA:6 SP ; 'e'ori((o SP #ell/area da%i locale M45 9SS$ecc,ioS%acA:6 SS ; 'e'ori((o SS #ell/area da%i locale ; ora +i+%e'o SS e SP del 'io #uo$o +%acA" M45 A36 SEG LocalSTA;< ; arc,e!!io i# A3 erc,F SS #o# a''e%%e la 'odifica i# i'D 'edia%o ;L) ; di+abili%o !li i#%erru % erc,F +e u# i#%erru % +i i#fila fra le due M45 +e!ue#%i ; %ro$a lo +%acA i#co#+i+%e#%e ('e((o $ecc,io e 'e((o #uo$o) ; (da #o%are c,e le #uo$e ;PU rifiu%a#o au%o'a%ica'e#%e l/i#%erru % do o l/i+%ru(io#e M45 SS6 A36 i# -ue+%o ca+o la ; ;L) e la ST) #o# +o#o i#di+ e#+abili) M45 SS6 A3 M45 SP6 488SET )#i(ioDelloS%acA ; faccio u#%are lo +%acA (SS"SP) all/i#diri((o +e!'e#%a%o di $alore iG al%o del 'io +%acA locale ; (ricordia'oci c,e lo +%acA au'e#%a cala#do di i#diri((o) ST) ; ora o++o a#c,e e++ere i#%erro%%o ; 00 -ui c/7 il codice della )S*6 c,e u+a libera'e#%e lo +%acA6 c,e 7 !ra#de =AbB%e ; 00 oi6 ri'a della fi#e della )S*" ; ri ri+%i#a6 dalla 'e'oria locale6 il u#%a%ore allo +%acA del ro!ra''a i#%erro%%o"

;L) M45 A36 9SS$ecc,ioS%acA: M45 SS6 A3 M45 SP6 9SP$ecc,ioS%acA: ST) ; ri ri+%i#a A3 del ro!ra''a i#%erro%%o6 c,e era #el +uo +%acA (ora +i $o a -uelloH)" P4P A3 )*ET

u#%a di #uoD

.ome "i -e!e* il pro)e!imento ( abba"tan$a ma))2ino"o e peri)olo"o. Se ( po""ibile* ( meglio limitare l#u"o !ello "ta)4 e u"are +uello !el programma interrotto.

Passaggio di parametri ed accesso ai dati


8ato )2e una routine !i "er-i$io !i un#interru$ione 2ar!ware non -iene )2iamata e"pli)itamente !a ne""un programma* ma parte in +ual"ia"i momento "otto )ontrollo !ell#2ar!ware* e""a non pu1 ri)e-ere parametri nI attra-er"o i regi"tri* nI attra-er"o lo "ta)4 %non "i "a )o"a )#( nei regi"tri* nI nello "ta)4 al momento !el lan)io !i una IS&'. p. 2 !i 11 2001-01-1F 2D Sw Interrupt."7w

Ing. Gabriele MONTI 1999 - 2005

Software per interrupt

www.ingmonti.it

Locazioni fisse
9# fa)ile pa""are parametri "e "i po""ono u"are lo)a$ioni fi""e in memoria* nelle +uali "ia la routine !i ri"po"ta* "ia )2i utili$$a il "uo "er-i$io* potranno leggere o ")ri-ere. 9"empioB Supponiamo )2e "i !ebba pa""are un parametro attra-er"o la lo)a$ione !i memoria AA12D2 %in!iri$$o ")ritto a 20 bit'. /er raggiungerla* )on in!iri$$o "egmentato* bi"ogna "tabilire un -alore per la parte !i "egmento !ell#in!iri$$o. Supponiamo !i -oler u"are il -alore AA122 )ome "egmento. ;llora* per raggiungere l#in!iri$$o !ato* il -alore !ell#off"et !o-r: e""ere 000D2 %"i ri)or!i il me))ani"mo per la "egmenta$ione* )on l#aggiunta !i +uattro bit a $ero al regi"tro !i "egmento e la "u))e""i-a a!!i$ione )on l#off"et'. /er la ")rittura !el -alore la IS&* o il programma prin)ipale* potranno fare )o"GB
; +cri%%ura di ES" M45 A36 88=>, M45 ES6 A3 M45 ES"9000.,:6 B3 ; +cri%%ura i# 'e'oria6 +e B3 co#%ie#e il $alore da +al$are

Esempio
,e"empio piC "empli)e )2e "i po""a immaginare ( +uello in )ui il programma prin)ipale non fa altro )2e atten!ere )2e una IS& mo!ifi)2i il -alore !i una -ariabile. /er +uanto "empli)e +ue"to programma pu1 e""ere utile per -erifi)are "e l,2ar!ware !ell,interrupt fun$iona e! e""o -iene effetti-amente lan)iato.
)NT#u'ber EIU J ; #u'ero del $e%%ore dKi#%erru(io#e c,e i#%ere++a

UN);4 SEGMENT ; defi#ia'o u# u#ico +e!'e#%o6 #el -uale 'e'ori((ia'o lKu#ico da%o della )S* )S*e+e!ui%a DB 0 ; ara'e%ro della )S*6 u+a%o co'e u# fla!" ; $ie#e 'e++o a 0 (T*UE) allKi#i(io del ro!ra''a ; $ie#e 'e++o a D= (8ALSE) dalla )S* ; +e!ue il codice della )S*6 c,e 7 co#$e#ie#%e 'e%%ere ro rio -ui" E%ic,e%%a)S*" ; la )S* %ra+for'a la $ariabile )S*e+e!ui%a da 0 a D= (%u%%i =)6 ; +e!#ala#do al ro!ra''a ri#ci ale c,e la rocedura 7 +%a%a e+e!ui%a ; ca'bio del ara'e%ro (Lfla!L )S*e+e!ui%a)" N4T ;S"9)S*e+e!ui%a: ; lKo$erride co# ;S ci er'e%%e di i#%erro' ere -ual+ia+i ; c,e u#%i a -ual+ia+i re!i+%ro )*ET )#i(io" ; codice c,e $ie#e fa%%o e+e!uire allKi#i(io del ro!ra''a" ASSUME ;S"UN);4 ; faccio u#%are ES allKi#i(io della 'e'oria" 34* A36 A3 M45 ES6 A3 ; i#+%alla(io#e del #uo$o $e%%ore allKe%ic,e%%a della #o+%ra )S*" ;L) M45 &ord PT* ES"9)NT#u'ber M ?:6 off+e% E%ic,e%%a)S* M45 &ord PT* ES"9)NT#u'ber M ? N >:6 +e! E%ic,e%%a)S* ST) ; P*4G*AMMA P*);)PALE M45 ;S"9)S*e+e!ui%a:6 0 ; i#i(iali((a(io#e del fla! ; a%%e+a c,e la )S* +ia la#cia%a" ri'a#e i# ; u# loo fi#o a c,e la )S* #o# 'odifica )S*e+e!ui%a A%%e+a" ;MP ;S"9)S*e+e!ui%a:6 0 OE A%%e+a ; HH +e arri$a -ui lK)S* 7 +ca%%a%a6 al%ri'e#%i ri'a#e i# loo ; co#clu+io#e" M45 A26 ?;, )NT >=, UN);4 e#d+ END )#i(io

ro!ra''a

HH

Il programma mo"trato omette per "empli)it: !i )ompren"ione al)uni !ettagli importanti* )ome l,e"e)u$ione !ell,6en! of interrupt6 %9OI' all,interno !ella IS& e! il ripri"tino !el -e))2io -ettore !,interru$ione alla )on)lu"ione. 2D Sw Interrupt."7w Eer. 0.=.0 2001-01-1F p. D !i 11

Ing. Gabriele MONTI

www.ingmonti.it

5ue"to "ignifi)a )2e* e"eguito )o"G )om,( ")ritto* pro-o)a fa)ilmente il blo))o !el )omputer %o !el programma* "e e"eguito in Jin!ow"'. Il )o!i)e !el programma "i pu1 tro-are nel file IS&minim.;SM* nel .8 &OM allegato al te"to. Il file INTte"t.;SM )ontiene una -er"ione piC 6e!u)ata6* )2e e")e in mo!o )orretto* ripri"tinan!o il -e))2io -ettore !,interru$ione* e! emette il )oman!o 9OI.

Corse
0na )on!i$ione molto peri)olo"a )2e pu1 "-iluppar"i +uan!o "i 2anno -ariabili )on!i-i"e )2e -engono mo!ifi)ate !a piC !i un interrupt ( la 6)or"a6 o 6)or"a )riti)a6 %6race )on!ition6'. Si !efini")e 6corsa" una )on!i$ione anomala )2e "i manife"ta a )au"a !i una inatte"a !ipen!en$a !i un programma !all,or!ine e !agli i"tanti in )ui a))a!ono )erti e-enti. /roprio per limitare il problema !elle )or"e la ./0 pro--e!e a! a$$erare il flag !i interrupt +uan!o entra nelle IS&. 5uan!o "i -erifi)a una )or"a )riti)a il -alore !elle -ariabili non ( piC 6)oerente6. In +ue"to )a"o "i !i)e )2e la -ariabile non ( 6consistente6* tra!u)en!o !irettamente l,aggetti-o ingle"e 6)on"i"tent6* )2e "ignifi)a 6regolare6* 6)oerente6 o 6affi!abile6. Ee!iamo )on un e"empio )ome "i pu1 "-iluppare una )or"a )riti)a. Supponiamo !i a-ere un,area !i memoria !i F 4H<te !e"tinata a fare !a buffer per i !ati letti !a !ue )on-ertitori ;K8 !a L bit. 5ue"t,area !i memoria )o"titui")e un 6buffer )ir)olare6* nel +uale -engono a))umulati !ati fino a )2e l,area !i F4H<te non ( piena* poi "i ri)omin)ia !all,ini$io. 5uan!o la )on-er"ione in uno !ei !ue ;K8 ( terminata e""o lan)ia un interrupt3 i !ue )on-ertitori "ono )ollegati alla "te""a linea !i interrupt* per)i1 inne")ano la "te""a IS&3 per ri)ono")ere +uale !ei !ue )on-ertitori 2a lan)iato l,interrupt "i u"a il bit piC "ignifi)ati-o !ello "te""o b<te in )ui ( pre"ente la lettura !el )on-ertitore. Se +uel bit -ale 1 -uol !ire )2e +uel )on-ertitore ; K8 in +uel momento "ta lan)ian!o un,interru$ione. Supponiamo an)2e )2e la "empli)e lettura !el port fa))ia 6)an)ellare6 il bit )2e "egnala l,interru$ione %ri)ono")imento !ell,interrupt'. ;nali$$iamo !un+ue la "eguente IS& )2e* a )au"a !ell,e"e)u$ione !i una pro)e!ura !i lunga !urata* ri)2ie!e )2e il "i"tema !elle interru$ioni "ia abilitato %i"tru$ione STI* punto M0N !el "orgente'B
.. )+rAPD" ; +ca%%a al co' le%a'e#%o di o!#i co#$er+io#e AQD ; +al$a%a!!io del co#%e+%o del ro!ra''a i#%erro%%o" PUS2 A3 PUS2 B3 ST) ; riabili%o !li i#%erru % erc,F 90: ; de$o e+e!uire u#a lu#!a rocedura ;ALL U#aLu#!aProcedura ; rocedura c,e re#de L'ol%o %e' oL )N AL6 )#diri((oAPD= ; le%%ura di AQD #0= ; co#%rolla +e 7 = c,e la#cia lKi#%erru %" TEST AL6 =0000000b OR No#Eu#o eU#o" ; i#%erru % la#cia%o da AQD #0= )N AL6 )#diri((oAPD> ; le%%ura di AQD #0> No#Eu#o" ; i#%erru % la#cia%o da AQD #0>

AND AL6 0========b

; ca#cella il bi% iG +i!#ifica%i$o6 ; c,e +e!#ala la fi#e co#$er+io#e M45 B36 9Pro++i'o)N: ; le!!e lKi#diri((o del ro++i'o 9=: ; $alore da +cri$ere #el buffer M45 9B3:6 AL ; +cri$e #el buffer 9>: )N; 9Pro++i'o)N: ; fa a$a#(are il buffer er il ro++i'o $alore AND 9Pro++i'o)N:6 0888, ; do o ?ABB%e ri'a#da allKi#i(io del buffer ; il u#%a%ore Pro++i'o)N (off+e% 0) ; 9.: ; (S %rucco docu'e#%a%o #el ca i%olo LTec#ic,e di ro!ra''a(io#eL del ; ri'o $olu'e di -ue+%o libro6 ;a i%olo L%ec#ic,e di ro!ra''a(io#eL6 ; ara!rafo L;o#%a%ori a 'oduloL) ; ri ri+%i#o del co#%e+%o" P4P B3 P4P A3

)*ET

Il programma ( piutto"to "empli)e. ;! ogni interrupt la IS&B - legge il -alore !ell,;K8 - !etermina +uale !ei !ue ;K8 2a lan)iato l,interru$ione p. F !i 11 2001-01-1F 2D Sw Interrupt."7w

Ing. Gabriele MONTI 1999 - 2005

Software per interrupt

www.ingmonti.it

- legge il puntatore nel buffer - ")ri-e il -alore letto all,in!iri$$o !el puntatore - aggiorna il puntatore Naturalmente un,altra parte !el programma* )2e +ui non intere""a* 6"-uota6 il buffer per anali$$are i !ati* mo!ifi)an!o il puntatore 0ltimoOut. 8ato )2e la IS& in)lu!e un,i"tru$ione STI* un ;8. pu1 interrompere mentre ( in )or"o la IS& )2e "ta "er-en!o l,altro ;8.. 8un+ue una IS& pu1 interrompere un,altra IS&. 5ue"ta interru$ione non )au"a ne""un problema nella ge"tione !ello "ta)4 e le !ue pro)e!ure -engono e"eguite e ritornano regolarmente. In -erit: "e pro-iamo a! e"eguire il programma )o"G )om,( e""o "embra fun$ionare regolarmente* "olo )2e* molto raramente* !i)iamo una -olta "u !ie)imila* un !ato !a un ;8. -iene mi"terio"amente per!uto. a ragione ( !o-uta all,inne")o !i una )or"a* in +uell,uni)o )a"o "u !ie)imila. .i1 a))a!e +uan!o ")atta un "e)on!o interrupt mentre ( in e"e)u$ione l,i"tru$ione in!i)ata )on M1N nel "orgente pro)e!ente. /ro-iamo a! e"eguire 6a mano6 la pro)e!ura* fa)en!o le "eguenti ipote"i e"emplifi)ati-eB - /ro""imoIn -ale L00 - la IS& -iene lan)iata per)2I ;8. 1 2a pro!otto il -alore 100 - la IS& !i ;8. 1 -iene interrotta per)2I -iene letto il -alore 200 "u ;8. 2 Se l,or!ine !i e"e)u$ione !elle i"tru$ioni piC importanti ( +uello illu"trato "u))e""i-amente le IS& mettono -alori !i-er"i nella "te""a po"i$ione !el buffer. Il primo !ei !ue -alori )2e -iene ")ritto -iene per)i1 "o-ra")ritto* e -iene per!uto. Supponiamo !un+ue )2e "i "u""eguano +ue"te i"tru$ioniB
.. )S* do$u%a ad AD; =" )+rAPD" PUS2 A3 PUS2 B3 .. )N AL6 )#diri((oAPD= .. M45 B36 9Pro++i'o)N:

i# AL fi#i+ce il #u'ero =00 i# B3 fi#i+ce T006 i#diri((o corre#%e del buffer

HH 4*A S;ATTA LK)NTE**UPT D) AD; > HH )S* do$u%a ad AD; >" e+e!ue la +eco#da )S*6 Lde#%roL alla ri'a" )+rAPD" PUS2 A3 PUS2 B3

; )N B3 S) SAL5A T00H

00 Do o le al%re i+%ru(io#i della )S* i#%er#a +i !iu#!e a" 00 )N AL6 )#diri((oAPD> ; i# AL fi#i+ce il #u'ero >00 M45 B36 9Pro++i'o)N: M45 9B3:6 AL 00 ; i# B3 fi#i+ce AN;4*A T006 i#fa%%i la ri'a )S* ; #o# ,a a!!ior#a%o Pro++i'o)N erc,F 7 +%a%a i#%erro%%a ; #el buffer $ie#e +cri%%o il #u'ero >00 ; 'a NELLA P4S)R)4NE ;2E ;4MPETE AL 5AL4*E D) AQD #0=

+i

ro+e!ue #ella )S* Li#%er#aL fi#o a co#cluderla" ; ri ri+%i#a il #u'ero T006 'e++o #ello +%acA allKi#i(io ; della )S* i#%er#a

P4P B3 )*ET P4P A3 M45 9B3:6 AL 00 )*ET

; u#%o 9>: della )S* e+%er#a6 i# B3 7 a e#a ; +%a%o ri ri+%i#a%o il $alore T006 er cui ; -ue+%a M45 S45*AS;*)5E il $alore recede#%e

a )on"eguen$a !i +ue"to e"empio ( )2e in al)uni momenti 6"fortunati6 "i pu1 per!ere un -alore letto !a uno !ei !ue ;K83 )ome a-remo luogo !i -e!ere meglio nella parte !i +ue"to -olume relati-a ai Si"temi Operati-i* le )on"eguen$e po""ono e""ere piC gra-i3 in molti )a"i il programma "i potrebbe blo))are in uno "tallo %!ea!lo)4'.

2D Sw Interrupt."7w

Eer. 0.=.0 2001-01-1F

p. 5 !i 11

Ing. Gabriele MONTI

www.ingmonti.it

0na le$ione )2e impariamo !a +ue"to problema ( )2e la "u""i"ten$a !i )or"e genera errori intermittenti %6intermittent"6' )2e non "i pre"entano per la gran parte !el tempo e )olpi")ono "olo +uan!o a))a!ono al)une "e+uen$e 6"fortunate6 !i e-enti. .2iaramente* !ato )2e non "i pu1 )ontare "ulla fortuna* il programma fun$ionante non !o-r: a-ere )or"e e per)i1 fun$ioner: "empre. /er )urare il problema* nel )a"o !el no"tro e"empio* ba"ta-a impe!ire all,altro ;8. !i interrompere nel momento in )ui "i legge eKo "i mo!ifi)a la -ariabile )on!i-i"a. /er far )i1 ba"ta-a in"erire un,i"tru$ione . I prima !el punto M1NB
.. ; ora #e++u#o i#%erro' e 'e#%re le!!o ; e 'odifico Pro++i'o)N M45 B36 9Pro++i'o)N: ; le!!e lKi#diri((o del ro++i'o 9=: ; $alore da +cri$ere #el buffer M45 9B3:6 AL ; +cri$e #el buffer 9>: )N; 9Pro++i'o)N: ; fa a$a#(are il buffer er il ro++i'o $alore AND 9Pro++i'o)N:6 0888, ; do o ?ABB%e ri'a#da allKi#i(io del buffer ; il u#%a%ore Pro++i'o)N (off+e% 0) ; 9.: ST)= ; ora o++o#o a#c,e i#%erro' ere6 %a#%o ; Pro++i'o)N 7 !iC a o+%o ;L)

..

1.1.1

;))e""o a! altre routine

;ll#interno !i una IS& l,u"o !elle pro)e!ure !e-e e""ere "ottopo"to a ")rutinio molto a))urato* per)2I e""e po""ono )au"are gra-i problemi* !o-uti al fatto )2e l,a--io !ella IS& a--iene "otto il )ontrollo !ell,2ar!ware.

Riusabilit
Se !a una IS& "i -uole )2iamare un,altra routine bi"ogna )2ie!er"iB 6)o"a "u))e!e "e la IS& 2a interrotto proprio +uella routine )2e -orrebbe )2iamareO6 .on"i!eriamo una +ual"ia"i routine )2e u"i !elle -ariabili globali* o! e"terne a! e""a. Se e""a le u"a e le mo!ifi)a "en$a riini$iali$$arle* ogni -olta )2e -iene e"eguita -e!r: un -alore !i-er"o nelle -ariabili globali* e lo )ambier: ulteriormente. 5ue"to tipo !i pro)e!ure "ono "oggette a problemi !i )or"e +uan!o -engono interrotte !a altre pro)e!ure )2e a))e!ono a +uelle -ariabili globali. /er +ue"ta ragione -engono !ette non riu"abili. Se una routine u"a -ariabili globali* ma le ini$iali$$a "empre* ogni -olta "i riparte !allo "te""o punto per )ui "e -iene )2iamata )on gli "te""i parametri a-r: "empre lo "te""o ri"ultato. 0na routine !el genere -iene !etta riu"abile in "erie.

Rientranza
Se una routine u"a "olo -ariabili )2e !efini")e e! ini$iali$$a lo)almente %e* !i "olito* ")arta alla fine* per ri"parmiare memoria'* e""a ( tale )2e ogni )2iamata alla routine genera e! u"a i propri !ati* non mo!ifi)an!o !ati !i altri. &outine )ome +ue"ta -engono !ette rientranti %6reentrant6'. &outine rientranti po""ono e""ere interrotte in ogni punto* an)2e !a "I "te""e* e !are )omun+ue un ri"ultato )orretto. Si))ome una IS& potrebbe a-ere interrotto l#e"e)u$ione !i una routine +ual"ia"i* e non 2a mo!o !i "apere +uale* e""a non pu1 )2iamare un#altra routine "e e""a non ( rientrante. Se una routine ne )2iama un,altra non rientrante non ( rientrante. Nella reali$$a$ione !i pro)e!ure rientranti "i !e-e )on"i!erare )2e i linguaggi a! alto li-ello fanno "pe""o )2iamate a librerie 6na")o"te6* )2e +ua"i "empre non "ono rientranti. e routine !el HIOS e !ell#MS-8OS non "ono rientranti. Molte !elle fun$ioni !i libreria !ei linguaggi a! alto li-ello non "ono rientranti %per u"arle in IS& ( ne)e""ario -erifi)are nella !o)umenta$ione !el linguaggio'. e pro)e!ure !el nu)leo %4ernel' !ei Si"temi Operati-i multiprogrammati %-e!i i )apitoli "ui Si"temi Operati-i' !e-ono e""ere rientranti.

Possibilit di interruzione da parte di altre routine


/er limitare il problema !elle )or"e "arebbe i!eale e"eguire tutte le IS& )on interrupt !i"abilitati* )o"a )2e !,altron!e -iene in)enti-ata !alla ./0 "te""a* )2e !i"abilita gli interrupt mentre "alta alla IS&. /eraltro potrebbe e""ere ne)e""ario ")ri-ere IS& )2e !urino per troppo tempo. In +ue"to )a"o bi"ogna e"eguire una STI e riabilitare le interru$ioni. 5ue"to "ignifi)a )2e la no"tra IS& potrebbe e""ere interrotta !a altre routine !#interru$ione. .on"i!erare +ue"ta e-enien$a "ignifi)a proteggere !agli altri interrupt tutte le lo)a$ioni !i memoria )2e )i "er-ono nella IS& e )2e gli altri interrupt potrebbero u"are. .i1 "i ottiene !i"abilitan!o le interru$ioni tutte le -olte )2e "i a))e!e a lo)a$ioni !i memoria )2e po""ono "er-ire a! altre routine !#interru$ione* e ripri"tinan!ole "ubito !opo. %. I* poi STI'. Inoltre potrebbe !ar"i !i !o-er ")ri-ere la no"tra routine in mo!o )2e "ia rientrante* per)2I* "e ")atta an)ora l#interrupt )2e "tiamo "er-en!o* la no"tra routine -err: interrotta !a "I "te""aP

re!uenza degli interrupt


Supponiamo )2e una IS& non fa))ia in tempo a )on)lu!er"i prima !ell,interrupt "u))e""i-o. In +ue"to )a"o "i )orre in)ontro a !ue peri)oli. - "e !urante la IS& gli interrupt "ono !i"atti-ati la ri"po"ta al "e)on!o interrupt potrebbe giungere troppo tar!i %alla fine !ella prima IS&' - "e in-e)e gli interrupt "ono abilitati e la IS& interrotta ( rientrante non !o-rebbero e""er)i problemi.
1

5ue"t,ultima STI non era in!i"pen"abile in +ue"to )a"o "pe)ifi)o* !ato )2e )i pen"a la I&9T )2e "egue "ubito !opo.

p. > !i 11

2001-01-1F

2D Sw Interrupt."7w

Ing. Gabriele MONTI 1999 - 2005

Software per interrupt

www.ingmonti.it

5ue"to ( -ero "olo "e la "itua$ione !e")ritta non "i pre"enta regolarmente* per)2I "e giunge un flu""o )o"tante !i interrupt )2e non la")ia mai )on)lu!ere le IS& lo "ta)4 "i pu1 riempire molto rapi!amente e "e "i e"auri")e .. %H0MP'. 9))o !un+ue un,altra ragione per ")ri-ere IS& bre-i.

1.2 Interrupt in MS-DOS


Passaggio dei parametri
Se i !ati !e-ono e""ere pa""ati attra-er"o lo)a$ioni non fi""e in memoria* "i pu1 fare una !i"tin$ione fra programmi 6..OM 6 e 6.9Q96. /rogrammi ..OM Se il programma )2e u"a* in"talla e )ontiene la IS& ( !i tipo ..OM* tutti i "egmenti )oin)i!ono* )o"G "i pu1 a))e!ere a -ariabili !ell#appli)ati-o "empli)emente utili$$an!o .S )ome regi"tro !i "egmento e! u"an!o l#o-erri!e %.S )ontiene il giu"to -alore !el "egmento* per)2I e""o ( nella -e)tor table e -iene "ettato al momento !el "alto A;& alla IS&'. 9"empioB
M45 ;S"9Da%oDella)S*:6 A3

In +ue"to mo!o non ( ne)e""ario mo!ifi)are 8S e per)i1 neppure "al-arlo e ripri"tinarlo. /rogrammi .9Q9 5ualora il file "ia .9Q9* ( ne)e""ario )2e la IS& )ono")a il "egmento !ell#in!iri$$o al +uale la-orare. a IS& !o-r: per)i1 ri)2ie!ere al 8OS un ?!ata "egment fi7-up@* ottenen!o un -alore !a mettere in 8S* !opo a-erne "al-ato il -alore -e))2io. 9"empioB
)S*" M45 A36 SEG Se!'e#%oDa%iDella)S* M45 DS6 A3 ; da%a +e!'e#% fi1Du

; +cri$e #el +e!'e#%o !iu+%o ; i# u# 0;4M6 coi#cido#o0

erc,F i $alori di ;S e DS6

Naturalmente il -e))2io -alore !i 8S -a )on"er-ato e ripri"tinato* )ome per 9S nell#e"empio pre)e!ente. In alternati-a "i pu1 u"are la te)ni)a gi: -i"ta nel primo e"empio )ompleto %INTte"t.;SM' e 6na")on!ere6 i !ati nel "egmento !i )o!i)e !ella IS&* u"an!o poi l,o-erri!e )on .S per a))e!ere al "egmento.

"so del controllore d#interruzione


.ome gi: !etto nel )apitolo pre)e!ente* non ( il )a"o !i )ambiare le mo!alit: !i fun$ionamento !ei /I. %=259' !el /.* nI il numero !i -ettore )2e e""i mettono "ul !ata bu"* +uan!o "olle)itati !ai !i"po"iti-i %0=2'. e )o"e )2e "i po""ono %o "i !ebbono' fare in mo!o abba"tan$a "i)uro "onoB "pe!i$ione !el )oman!o !i fine !ell#interru$ione e ma")2eramento !i "ingole "orgenti !i interru$ione a li-ello !el /I.* e"empi "u )ome farlo "ono "tati gi: pre"entati nel pre)e!ente )apitolo.

Installazione e rimozione di ISR dalla tabella dei vettori


Nell,e"empio pre)e!ente abbiamo -i"to l,in"talla$ione !i una nuo-a IS& ")ri-en!o !irettamente nella tabella !el -ettori !,interru$ione.
; i#+%alla(io#e del #uo$o $e%%ore allKe%ic,e%%a della #o+%ra )S*" ;L) M45 &ord PT* ES"9)NT#u'ber M ?:6 off+e% E%ic,e%%a)S* M45 &ord PT* ES"9)NT#u'ber M ? N >:6 +e! E%ic,e%%a)S* ST)

Si noti )2e gli interrupt !e-ono e""ere !i"abilitati per)2I "e l,interrupt 6)olpi")e6 fra un,i"tru$ione e l,altra il "alto u"a l,off"et !ella nuo-a IS& e! il "egmento !ella -e))2iaP Ogni programma )2e in"talli una "ua IS& !e-e ripri"tinare* prima !i terminare* +uella )2e era pre"ente pre)e!entemente nella tabella !ei -ettori. Infatti +uan!o il programma fini")e la "ua memoria -iene liberata e "u))e""i-amente riutili$$ata. a")ian!o )2e il -ettore !,interru$ione )ontinui a puntare al programma terminato )i "i e"pone a! un "alto 6nel -uoto6 +uan!o il )o!i)e !el no"tro programma "ar: "o-ra")ritto !a uno nuo-o. /er +ue"to +uan!o un programma )2e u"a una nuo-a IS& fa mo!ifi)2e alla tabella !ei -ettori !#interru$ione* !e-e leggerne prima il )ontenuto* memori$$are !a +ual)2e parte il -alore !el -e))2io -ettore e* +uan!o fini")e* prima !i tornare al 8OS* rimettere nella Interrupt Table il -alore -e))2io* )2e era "tato )on"er-ato. Ee!iamo un e"empio. /er 6ri)or!ar"i6 !el puntatore alla -e))2ia IS&* utili$$iamo +uattro b<te !i memoriaB
4ff+e%5ecc,io;odice DW ? Se!'e#%o5ecc,io;odice DW ?

poi* nel programma prin)ipale* !obbiamo memori$$are il -e))2io -ettoreB


; 'e'ori((a(io#e del $ecc,io $e%%ore dKi#%erru(io#e"

2D Sw Interrupt."7w

Eer. 0.=.0 2001-01-1F

p. L !i 11

Ing. Gabriele MONTI

www.ingmonti.it

M45 A36 ES"9)NT#u'ber M ?: ; le%%ura del $ecc,io off+e% dalla %abella M45 ;S"94ff+e%5ecc,io;odice:6 A3 ; 'e'ori((a(io#e %e' ora#ea M45 A36 ES"9)NT#u'ber M ? N >: ; le%%ura del $ecc,io +e!'e#%o dalla %abella M45 ;S"9Se!'e#%o5ecc,io;odice:6 A3 ; 'e'ori((a(io#e %e' ora#ea ; HH i# ES ci de$e e++ere 0 HH

Su))e""i-amente in"talliamo la nuo-a IS& la u"iamo* e"eguen!o il programma prin)ipale. Infine* prima !ella )on)lu"ione !el programma* rimettiamo a po"to la -e))2ia IS&B
; ri ri+%i#o il $ecc,io $e%%ore dKi#%erru(io#e" M45 A36 ;S"94ff+e%5ecc,io;odice: ;L) M45 ES"9)NT#u'ber M ?:6 A3 M45 A36 ;S"9Se!'e#%o5ecc,io;odice: M45 ES"9)NT#u'ber M ? N >:6 A3 ST)

/er l,in"talla$ione !i "er-i$i nella tabella !ei -ettori MS8OS mette a !i"po"i$ione un "er-i$io "pe)ifi)o* )2e fa le )o"e appena in!i)ate e! ( piC* "pe)ialmente "e il )omputer ( in rete o "i u"a Jin!ow". Infatti in +ue"to )a"o il "i"tema operati-o a-r: la notifi)a )2e la tabella !ei -ettori ( "tata mo!ifi)ata e potr: riportarlo nelle "ue tabelle. Il "er-i$io pre!i"po"to allo ")opo e il numero 252 !ell#interrupt "oftware 212 e "er-e per ")ri-ere un -ettore !#interru$ione al po"to giu"to !ella tabella !ei -ettori* il "er-i$io D52 in-e)e legge la tabella !ei -ettori. 5ue"ti "er-i$i fun$ionano )o"GB ettura !el -ettoreB
A2 U .5, Ser$i(io V!e% i#%erru % $ec%orW AL U #u'ero del $e%%ore da le!!ere (0D>55) ES U +e!'e#%o dell/i#diri((o della rou%i#e di ri+ o+%a B3 U off+e% dell/i#diri((o della rou%i#e di ri+ o+%a ;,ia'a%a del +er$i(io" )NT >=,

S)rittura !el -ettore !,interru$ioneB


A2 U >5, Ser$i(io V+e% i#%erru % $ec%orW AL U #u'ero del $e%%ore da 'odificare (0D>55) DS U +e!'e#%o dell/i#diri((o della rou%i#e di ri+ o+%a D3 U off+e% dell/i#diri((o della rou%i#e di ri+ o+%a ;,ia'a%a del +er$i(io" )NT >=,

5ue"ti "er-i$i pro--e!ono a !i"abilitare le interru$ioni prima !i fare le mo!ifi)2e e a riabilitarle +uan!o )i1 ( "i)uro. 0n problema potrebbe in"orgere "e il programma fini")e "en$a pa""are !alla parte !i )o!i)e )2e fa l,opera$ione !i ripri"tino !ella -e))2ia IS&. 5ue"to potrebbe a))e!ere* per e"empio* "e )#( un,e))e$ione !o-uto a! una !i-i"ione per $ero* )2e fa finire il programma per una -ia non pre-i"ta. Se )i1 a))a!e la -e))2ia IS& non -iene ripri"tinata e! il "i"tema "i blo))a non appena )ari)2iamo un nuo-o programma. I linguaggi a! alto li-ello mettono a !i"po"i$ione librerie per la ge"tione !elle e))e$ioni )2e "i pren!ono )ari)o !i +ue"to problema.

1.2.1

TS& !#interru$ione

In al)uni )a"i ( utile in"tallare routine !#interru$ione )2e )ontinuino a fun$ionare an)2e +uan!o il programma )2e le 2a in"tallate fini")e. I programmi )2e terminano non rila")ian!o al 8OS* tutta o in parte* la memoria )2e u"ano* "i )2iamano ?Terminate but Sta< &e"i!ent@ %$SR'. 9""i* per )ontinuare a fun$ionare an)2e !opo )2e il programma )2e li 2a in"tallati ( finito* !e-ono ne)e""ariamente e""ere aggan)iati a +ual)2e -ettore !i interru$ione* )2e li fa fun$ionare )ome IS& !i "er-i$i 2ar!ware o "oftware %p.e". il programma TS& potrebbe inter)ettare la )2iamata al 8OS per la ")rittura "u -i!eo %interrupt "oftware' o la pre""ione !i parti)olari )ombina$ioni !i ta"ti %interrupt 2ar!ware''. 0n programma ;""embl< ")ritto per e""ere TS& "i !e-e !i-i!ere !ue partiB una parte* +uella a! in!iri$$i piC ba""i* ( !e"tinata a rimanere in memoria an)2e !opo )2e il programma ( finito a parte rimanente in-e)e -err: liberata !alla memoria al momento !ella fine !el programma3 al momento !ell#e"e)u$ione !a parte !ell#utente !i un programma "u))e""i-o* la parte non re"i!ente -err: "o-ra")ritta* mentre la parte re"i!ente rimarr: into))ata. /er in"tallare un TS&* alla fine !ell#e"e)u$ione !el main* in-e)e !el "er-i$io ;R S F.2 !ell#interrupt 212* "i u"a il "er-i$io ;RSD12. Ser-i$io 6terminate an! "ta< re"i!ent6B
A2 U .=, Ser$i(io V%er'i#a%e a#d +%aB re+ide#%W

p. = !i 11

2001-01-1F

2D Sw Interrupt."7w

Ing. Gabriele MONTI 1999 - 2005

Software per interrupt

www.ingmonti.it

AL U codice di ri%or#o da ar%e del +er$i(io D3 U #u'ero dei ara!rafi del ro!ra''a c,e de$o#o ri'a#ere re+ide#%i (u# BB%e) ;,ia'a%a del +er$i(io" )NT >=,

ara!rafo U =E

5ue"to "er-i$io pu1 in"tallare )ome TS& programmi ..OM e .9Q9. /rima !i )2iamare INT 2L2* "i !o-r: )opiare in 8Q 1K1> !ella !imen"ione !ella parte !el programma )2e "i -uole la")iare in memoria. 8i )on"eguen$a tutte le lo)a$ioni !all#ini$io !el programma a +uella pre)e!ente alla !imen"ione pa""ata in 8Q rimarranno re"i!enti in memoria. Si far: in mo!o )2e in e""e "tiano la routine )2e -ogliamo in"tallare )ome TS& e! i "uoi !ati lo)ali. Il programma prin)ipale* )2e -err: e"eguito una "ola -olta e )2e in"taller: la IS& nel giu"to -ettore !#interru$ione* potr: !i "olito e""ere )an)ellato !opo )2e ( "tato e"eguito. 9"empioB
; U+ci%a co'e TS* co# +er$i(io D4S A2 U .=, ; ciX c,e 'i i#%ere++a la+ciare i# 'e'oria i#i(ia da off+e% 06 er ; cui lKoff+e% dellKe%ic,e%%a dalla -uale $o!lio L%a!liareL 7 il #u'ero ; di BB%e c,e $a##o la+cia%i i# 'e'oria0 ; #e calcolo =Q=E er a$ere il #u'ero dei ara!rafi6 oi a!!iu#!o = er ; a$er#e al'e#o =" M45 D36 off+e% Ta!lioDaIui S2* D36 ? )N; D3 M45 A26 .=, > )NT >=, ; c,ia'a%a al D4S er TS*

#in"talla$ione !i una IS& re"i!ente toglie !al -ettore !#interru$ione la -e))2ia IS&. Si))ome alla fine !el programma la nuo-a IS& !e-e rimanere re"i!ente* non "i !e-e piC ripri"tinare il )ontenuto !el -e))2io -ettore !#interru$ione. 9, +uin!i buona norma fare in mo!o )2e la -e))2ia routine !#interru$ione -enga an)ora e"eguita* )2iaman!ola !a +ual)2e punto !ella no"tra nuo-a IS& e fa)en!o u"o* per il "alto* !ell#in!iri$$o !el -e))2io -ettore !#interru$ione. 5ue"to in!iri$$o "i pu1 a)+ui"ire )on le "te""e mo!alit: gi: -i"te e ")ri-ere nella memoria lo)ale !ella IS&. e -er"ioni piC mo!erne !i Jin!ow" fanno automati)amente +ual)o"a !i analogo +uan!o "i lan)ia un +ual"ia"i programma 8OS )2e mo!ifi)a la tabella !ei -ettori !,interru$ione. In +ue"to mo!o il programma 8OS pu1 fun$ionare regolarmente pur "en$a )o"tituire un gro""o peri)olo per gli altri programmi e per il S.O. "te""o. /er -erifi)are +ue"to fatto "i pu1 e"eguire +ue"to e"perimentoB 1. far partire il )omputer in mo!alit: MS8OS o )on un !i")2etto 8OS 2. e"eguire il programma TS&in"tl* !e")ritto nel paragrafo "u))e""i-o e pre"ente "ul .8&OM allegato. TS&in"tl in"talla una IS& "ull,interrupt !el "<"tem )lo)4 e la la")ia TS&* per )ui l,interrupt !el )lo)4 8OS rimane 6"ta))ato6 D. e"eguire il )oman!o TIM9 al)une -olteB )ome )i "i pote-a a"pettare il tempo ( 6)ongelato6* !ato )2e l,interrupt 8OS !el )lo)4 non arri-a piC F. far partire Jin!ow" e ripetere le "te""e opera$ioni* in"tallan!o TS&in"tl. Ora l,ora !i TIM9 -a a-anti* )onferman!o)i il fatto )2e la ri)2ie"ta !i mo!ifi)a !ella tabella !ei -ettori -iene inter)ettata !a Jin!ow" )2e fa in mo!o )2e po""ano e"eguire "ia la "ua IS&* "ia +uella !el programma 8OS. 0na TS& !i e"empio I programmi TS&in"tl.;SM* TS&u"a.;SM e TS&togli.;SM* pre"enti nel .8&OM allegato* permettono !i pro-are una TS& molto "empli)e. Il programma TS&in"tl in"talla )ome TS& una IS& )2e ri"pon!e all,INT=* +uello !el realtime )lo)4 )2e -iene lan)iato 1=*2 -olteK". 5ue"ta IS& non fa altro )2e )ontare in una lo)a$ione !i memoria al "uo interno il numero !i -olte )2e la IS& -iene e"eguita. Il programma TS&u"a -a a leggere il )onteggio nella memoria !ella IS& e lo -i"uali$$a. Il programma TS&togli toglie la no"tra TS& !alla tabella !ei -ettori* rimetten!o il puntatore alla pro)e!ura )2e ),era prima. a Aigura 1 mo"tra il fun$ionamento !elle tre appli)a$ioni. Se "i lan)ia TS&u"a prima !i a-er in"tallato la TS& il ri"ultato ( un numero* prele-ato !alla memoria !a una lo)a$ione 6"bagliata6. 5uel -alore rimane )o"tante. .on l,e"e)u$ione !i TS&in"tl il )ontatore -iene aggiornato a! ogni IS& "ull,I&50* per )ui aumenta !i 1=*2 numeri al "e)on!o. Se "i e"egue ora TS&u"a e""o -i"uali$$a un -alore )re")ente )on il tempo tra")or"o. Se "i toglie la TS& !al -ettori !,interru$ione !i INT= )on il programma TS&togli la lettura pro!u)e lo "te""o numero fi""o !i prima* per)2I la no"tra IS& non -iene piC e"eguita %e! an)2e per)2I il programma TS&u"a legge alla "te""a lo)a$ione 6"bagliata6 !i prima'. TAI 9U u"oTS&.HM/ TKAI 9U igura 1% uso della $SR di esempio
>

;tten$ioneB per i programmi TS& pi))oli pu1 e""ere ne)e""ario pa""are in 8Q numeri piC gran!i !i +uelli ottenuti )on +ue"to pro)e!imentoP

2D Sw Interrupt."7w

Eer. 0.=.0 2001-01-1F

p. 9 !i 11

Ing. Gabriele MONTI

www.ingmonti.it

;nali$$iamo ora parte !ei tre programmi. Il programma !i in"talla$ione ")ri-e nella tabella !ei -ettori l,in!iri$$o !ella nuo-a IS&* "olo !opo a-er "al-ato l,in!iri$$o !ella -e))2ia in un,area !i memoria !i = H<te* )2e rimarr: an)2,e""a TS&. ,area !i memoria in +ue"tione "i !efini")e )o"GB
Nu'ero)S* DW 0 4ff+e%5ecc,io;odice DW ? Se!'e#%o5ecc,io;odice DW ? E%ic,e%%a)S*" ; -ue+%a loca(io#e ,a off+e% 0 #el +e!'e#%o ; -ue+%a loca(io#e ,a off+e% > ; -ue+%a loca(io#e ,a off+e% ?

.ome "i pu1 notare !all,eti)2etta !i ini$io !ella IS&* +ue"t,area !i memoria ri"ie!e imme!iatamente prima !ell,ini$io !el )o!i)e !ella IS&. 5ue"t,area !i memoria )ontiene il )ontatore )2e -err: aggiornato !alla IS& e l,in!iri$$o "egmentato !el -e))2io -ettore !i interru$ione. Il "al-ataggio !el puntatore alla -e))2ia IS& -iene fatto )o"GB
; le%%ura co# +er$i(io D4S dellKi#diri((o +e!'e#%a%o dalla %abella $e%%ori ; A2 U .5," +er$i(io .5, (!e% i#%erru % $ec%or) ; AL U 0J," ric,ie+%a dellKi#diri((o del $e%%ore 0J, M45 A36 .50J, )NT >=, ; c,ia'a%a al D4S M45 ;S"94ff+e%5ecc,io;odice:6 B3 ; il +er$i(io dC lKoffe+% i# B3 M45 ;S"9Se!'e#%o5ecc,io;odice:6 ES ; e il +e!'e#%o i# ES

/oi ( ne)e""ario ")ri-ere nella tabella !ei -ettori l,in!iri$$o !ella nuo-a IS&* )o"GB
; i#+%alla(io#e del #uo$o $e%%ore allKe%ic,e%%a della #o+%ra )S*" ; +cri%%ura co# +er$i(io D4S dellKi#diri((o +e!'e#%a%o #ella %abella $e%%ori M45 A36 SEG E%ic,e%%a)S* M45 DS6 A3 ; i# DS il +er$i(io >5, $uole il +e!'e#%o da i#+%allare M45 D36 off+e% E%ic,e%%a)S* ; i# D3 lKoff+e% ; A2 U >5," +er$i(io >5, (+e% i#%erru % $ec%or) ; AL U 0J," ric,ie+%a di i#+%allare #el $e%%ore 0J, M45 A36 >50J, )NT >=, ; c,ia'a%a al D4S

Infine il programma prin)ipale "i )on)lu!e u"an!o il "er-i$io D12 per rimanere TS&.
; U+ci%a co'e TS* co# +er$i(io D4S A2 U .=, ; i# D3 ci a#drebbe il #u'ero di ara!rafi c,e +i $uole la+ciare ; 'a ,a fu#(io#a%o +olo co# #u'eri iG !ra#di" ; il #u'ero !iu+%o +arebbe (off+e% Ta!lioDaIui Q =E) N = ; 'a #o# ,a fu#(io#a%oHH M45 D36 off+e% Ta!lioDaIui ; S2* D36 ? ; )N; D3 M45 A26 .=, )NT >=, ; c,ia'a%a al D4S er TS*

a IS& ( molto "empli)e e !o-rebbe ba"tare il "uo "te""o )o!i)e per !e")ri-erlaB
E%ic,e%%a)S*" ; la )S* i#cre'e#%a Nu'ero)S*6 co#%a#do il #u'ero di $ol%e c,e la )S* ; 7 ar%i%a ; +al$a%a!!io del co#%e+%o" PUS2 A3 ; cor o della )S*" )N; ;S"9Nu'ero)S*: ; e#d of i#%erru %" M45 AL6 >0, 4UT >0,6 AL ; ri ri+%i#o del co#%e+%o" P4P A3 )*ET

5uan!o -iene in"tallato TS&in"tl il )ontatore NumeroIS& -iene )reato e! ini$iali$$ato e )omin)ia "ubito a! e""ere in)rementato per =*2 -olteK". p. 10 !i 11 2001-01-1F 2D Sw Interrupt."7w

Ing. Gabriele MONTI 1999 - 2005

Software per interrupt

www.ingmonti.it

Il programma TS&u"a -i"uali$$a il )onteggio )2e la IS& "ta in)rementan!o* an!an!o a leggere nel "egmento !ella IS&. a parte piC importante !i +ue"to programma ( la "eguenteB
; re ara lKi#diri((o di +e!'e#%o i# cui a#dare a le!!ere il $alore ; del co#%a%ore6 il +e!'e#%o lo le!!e dalla %abella dei $e%%ori" M45 A36 0 M45 ES6 A3 M45 A36 ES"9J M ? N >: ; le%%ura del +e!'e#%o dalla %abella $e%%ori M45 ES6 A3 ; ora ES u#%a al +e!'e#%o (u#ico) della TS* ; le%%ura della $ariabile della TS*" M45 A36 ES"9Nu'ero)S*:

Nel )o!i)e "opra"tante NumeroIS& ( l,off"et !el )ontatore* )2e abbiamo -i"to e""ere 0 nel programma TS&in"tl. Il programma TS&togli "o"titui")e nella tabella !ei -ettori la no"tra IS& )on +uella )2e ),era prima. In mo!o analogo al programma pre)e!ente "i pro)ura* in 9S* il puntatore al "egmento !ella no"tra IS& e lG tro-a l,in!iri$$o !ella -e))2ia* ripri"tinan!ola nella tabella !ei -ettori.
M45 A36 ES"9Se!'e#%o5ecc,io;odice: M45 DS6 A3 ; il +er$i(io >5, $uole i# DS il +e!'e#%o da i#+%allare M45 D36 ES"94ff+e%5ecc,io;odice: ; i# D3 lKoff+e% ; i#+%alla(io#e del $ecc,io $e%%ore co# +er$i(io D4S ; A2 U >5," +er$i(io >5, (+e% i#%erru % $ec%or) ; AL U 0J," ric,ie+%a di i#+%allare #el $e%%ore 0J, M45 A36 >50J, )NT >=, ; c,ia'a%a al D4S

; +ue"to punto la no"tra IS& ( 6"gan)iata6 !alla tabella !ei -ettori e non progre!i")e piC nel )onteggio.

2D Sw Interrupt."7w

Eer. 0.=.0 2001-01-1F

p. 11 !i 11

Potrebbero piacerti anche